用下一个非NA值的平均值替换NA

时间:2016-06-03 10:11:51

标签: r missing-data zoo

我得到了一个包含每小时值的data.frame。有时我会错过几个小时的值,并希望用缺失值计数+1(非缺失值也是其中的一部分)来填充第一个非缺失值:

即。 (非常简化的版本)

 c(1,NA,NA,NA,4,NA,2,1)

我想要的是:

c(1,(4/4),(4/4),(4/4),(4/4),(2/2),(2/2),1)

将是:

c(1,1,1,1,1,1,1,1,1)

目前我使用带有na.locf的动物园,用第一个非na取代所有NA:对于我们的例子,这意味着:

c(1,4,4,4,4,2,2,1)

由于

1 个答案:

答案 0 :(得分:2)

您需要合并na.locfrle

library(zoo)

ifelse(is.na(x) | is.na(c(0, head(x,-1))), 
       with(rle(na.locf(x, fromLast=T)), rep(values/lengths, lengths)), 
       x)
[1] 1 1 1 1 1 1 1 1

它也适用于:

x = c(1, NA, 5, 3, 3, NA, NA, 1)
#[1] 1.0000000 2.5000000 2.5000000 3.0000000 3.0000000 0.3333333 0.3333333 0.3333333