【问题标题】:Replace NAs in a window around a value在值周围的窗口中替换 NA
【发布时间】:2015-11-25 21:14:32
【问题描述】:

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

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

我想用非 NA 值替换每个非 NA 值周围的窗口中的 NA。例如,非 NA 周围的 [EDIT] 5 窗口如下所示:

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

我可以用一组冗长而凌乱的ifelse 语句来做我想做的事。

有没有更好的方法?我查看了 zoo 的 NA 填充函数集,但没有看到任何窗口。

【问题讨论】:

    标签: r na zoo


    【解决方案1】:

    我猜滚动应用可以完成这项工作?

    > 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 
    

    【讨论】:

    • 这确实可以。动物园文档说 na.pad = TRUE 现在已弃用,请改用 fill = NA。
    【解决方案2】:

    我们也可以使用filter

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

    【讨论】:

    • 这个解决方案也能胜任。不像其他解决方案那样直观。如问题所述,这些数据是更大数据集的一部分。对于此解决方案,将 v2 向量 cbind 到其他数据。
    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多