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

R 用下一个非NA值的平均值替换NAs,r,missing-data,zoo,R,Missing Data,Zoo,我得到了一个带有小时值的data.frame。有时,我会在数小时内丢失值,并希望用缺失值计数+1(非缺失值也是其中的一部分)分隔的第一个非缺失值来填充该值: i、 e.(非常简化的版本) 我想要的是: 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) 目前,我使用zoo with na.locf,它将所有na替换为第一个非na:在我们的示例中,这意味着: c(1,4,4,4,4,2,2,1) 谢谢您需要

我得到了一个带有小时值的data.frame。有时,我会在数小时内丢失值,并希望用缺失值计数+1(非缺失值也是其中的一部分)分隔的第一个非缺失值来填充该值:

i、 e.(非常简化的版本)

我想要的是:

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)
目前,我使用zoo with na.locf,它将所有na替换为第一个非na:在我们的示例中,这意味着:

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

谢谢

您需要将
na.locf
rle
组合起来:

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