R 在值周围的窗口中替换NAs

R 在值周围的窗口中替换NAs,r,na,zoo,R,Na,Zoo,我的动物园数据如下所示。此数据是较大的zoo(时间序列)数据集的一部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 NA NA NA NA NA 1 NA NA NA NA NA 3 NA NA NA library(zoo) x <- zoo(c(NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA)) 我可以用一组冗长杂乱的ifelse语句做我想做的事

我的动物园数据如下所示。此数据是较大的zoo(时间序列)数据集的一部分

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
NA NA NA NA NA  1 NA NA NA NA NA  3 NA NA NA

 library(zoo)    
 x <- zoo(c(NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA))
我可以用一组冗长杂乱的
ifelse
语句做我想做的事情


有更好的办法吗?我查看了zoo的NA-fill函数集,但没有看到窗口的任何内容。

我想滚动应用程序可以完成这项工作吗

> rollapply(x, 5, function(x){mean(x[!is.na(x)])}, fill=NA)
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16 
 NA  NA NaN   1   1   1   1   1 NaN   3   3   3   3   3  NA  NA 

我们也可以使用
过滤器

v2 <- stats::filter(replace(v1,is.na(v1),0), rep(1,5))
is.na(v2) <- !v2

这确实起到了作用。zoo文档中说现在不推荐使用na.pad=TRUE,而是使用fill=na。此解决方案也可以完成此任务。不像其他解决方案那样直观。如问题所述,这些数据是更大数据集的一部分。对于此解决方案,cbind v2向量到其他数据。
v2 <- stats::filter(replace(v1,is.na(v1),0), rep(1,5))
is.na(v2) <- !v2