如何根据某些条件填写缺失值?

时间:2014-09-17 09:12:17

标签: r

我希望通过填充最后一次观察结果的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完好无损。任何帮助都非常感谢。

1 个答案:

答案 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