1

嗨,我有一个时间序列数据集,其中包含 8 月和 9 月的一些数据点。

如何使用默认值轻松填写缺失的日期,在这种情况下为 0:

我现在正在考虑merge的数据集具有我喜欢的时间线的顺序时间序列,然后na.fill用我想要的默认值替换 NAs。

这就是我所做的:

# This is my data z1
z1 <- zoo(c(1,2,3,4,5), as.Date(c('2013-08-09', '2013-08-12', '2013-09-02', '2013-09-09', '2013-09-15')))

# This is the timeline I want
z2 <- zoo(0, seq(from=as.Date('2013-08-01'), to=as.Date('2013-09-30'), by="day")) 

# This is my result
na.fill(merge(z1, z2)[,1], 0)

但我想知道是否已经存在一个功能来做我想做的事。就像是:

result <- foo_fill(z1, 0, start, end)
4

1 回答 1

2

如果你想用固定的指定值替换 NA,我认为merge是要走的路。不过,您可以进行一些简化:您不需要 z2 中的“零列”,您可以在merge步骤中填充零:

# input as per question
z1 <- zoo(c(1,2,3,4,5), 
        as.Date(c('2013-08-09', '2013-08-12', '2013-09-02', '2013-09-09', '2013-09-15')))
start <- as.Date('2013-08-01')
end <- as.Date('2013-09-30')

tt <- seq(start, end, by = "day")
merge(z1, zoo(, tt), fill = 0)

另一方面,如果您想用最后一个非 NA ( na.locf) 替换 NA,则该xout参数可能是一种指定用于额外和插值的日期范围的方法,而您不需要merge. 例如:

na.locf(z1, xout = tt)
于 2013-10-24T20:24:28.023 回答