我如何才能在动物园或xts上使用na.fill进行最大填充?

时间:2019-01-16 15:16:03

标签: r xts zoo

我想在最大间隙为3的xts中用0填充NA。

library(xts)

# make sample xts with gaps
x <- zoo(1:20, Sys.Date() + 1:20) 
x[2:4] <- NA # Short run of NA's 
x[10:16] <- NA # Long run of NA's 

#This is what I want to do, but it does not work
na.fill(x, 0, maxgap=3)

maxgap参数被忽略,所有NA都填充为0,我希望它能像na.approx一样工作

为解决@RLave的问题,我想替换长度为3或更短的所有NA序列。长度大于等于4的NA系列应保持不变。所需行为应与na.approx

相同

3 个答案:

答案 0 :(得分:3)

动物园中有一个未记录且未导出的.fill_short_gaps,其用法如下:

zoo:::.fill_short_gaps(x, fill = numeric(length(x)), maxgap = 3)

给予:

2019-01-17 2019-01-18 2019-01-19 2019-01-20 2019-01-21 2019-01-22 2019-01-23 
         1          0          0          0          5          6          7 
2019-01-24 2019-01-25 2019-01-26 2019-01-27 2019-01-28 2019-01-29 2019-01-30 
         8          9         NA         NA         NA         NA         NA 
2019-01-31 2019-02-01 2019-02-02 2019-02-03 2019-02-04 2019-02-05 
        NA         NA         17         18         19         20 

答案 1 :(得分:2)

我对 zoo 并不十分熟悉,因此不能说它是否提供函数或参数将为您提供方便。就是说,利用ix的{​​{1}}参数,您可以编写一个简单的包装函数来提供所需的功能。也许是这样的:

na.fill

答案 2 :(得分:0)

使用imputeTS软件包有一个非常简单的方法:

library("imputeTS")
na_replace(x, fill = 0 , maxgap = 3)

这适用于xts时间序列对象作为输入x,以及Zoo系列,向量或正常时间序列。