我希望通过填充最后一次观察结果的NA来将df转换为df1。下面是我的示例数据帧df:
df <-read.table(textConnection("
a b
NA NA
NA NA
NA NA
515 NA
513 NA
615 50
NA 58
NA 62
250 51
154 NA
42 NA
NA NA
NA 40
NA 42
NA 30
NA 28
NA NA
NA NA
"),header=T)
将转换为df1,如下所示:
df1 <-read.table(textConnection("
a b
NA NA
NA NA
NA NA
515 NA
513 NA
615 50
615 58
615 62
250 51
154 51
42 51
NA 51
NA 40
NA 42
NA 30
NA 28
NA NA
NA NA
"),header=T)
同时保持航向NA和尾随NA完好无损。任何帮助都非常感谢。
答案 0 :(得分:1)
library(zoo)
df[] <- lapply(df, function(x) {
x1 <- cumsum(c(1,abs(diff(is.na(x)))))
indx <- !x1 %in% c(x1[1], x1[length(x1)])
x[indx] <-na.locf(x[indx])
x})
identical(df,df1)
#[1] TRUE
或使用原始df
df[] <- na.approx(df, method="constant", na.rm=FALSE)
all.equal(df,df1, check.attributes=FALSE)
#[1] TRUE