rollapply与动物园和次日数据

时间:2014-07-17 15:21:13

标签: r time-series zoo rollapply

我有一个观察间距不等的数据集,经常每天观察一次以上。我想将一个函数应用于我的数据窗口,但我希望窗口是按时间而不是按行定义的。例如,我想在我的数据集中计算第1-5天,第2-6天等的平均值,第1-5天可能对应于第1-13行,第2-6天对应于行3-18等。

我看到rollapply函数接受zoo个对象,我认为它可以像我上面描述的那样工作(即在由时间定义的窗口上应用函数而不是由行定义的窗口)。但是,情况似乎并非如此:

my.ts = zoo( 1:100, as.Date("201401","%Y%j")+1:100 )
mean1 = rollapply( my.ts, 3, mean, align="right" )
my.ts = zoo( 1:100, as.Date("201401","%Y%j")+1:100/2 )
mean2 = rollapply( my.ts, 3, mean, align="right" )
all( mean1==mean2 )

我希望mean2mean1不同,因为mean2每天有两次观察,而不是一次。但是,rollapply似乎使用行来定义窗口而不是zoo对象的时间。有解决办法吗?或者,我应该使用其他一些功能代替rollapply

1 个答案:

答案 0 :(得分:5)

rollapply中记录了

?rollapply,因此无需猜测其工作原理。

做你想做的事情用NAs填写缺失的日子,然后执行平均值。例如,每三天做一次平均而不是每三次观察:

library(zoo)

# test data
tt <- as.Date("2000-01-01") + c(1, 2, 5, 6, 7, 8, 10)
z <- zoo(seq_along(tt), tt)

# fill it out to a daily series, zm, using NAs
g <- zoo(, seq(start(z), end(z), "day")) # zero width zoo series on a grid
zm <- merge(z, g)

rollapply(zm, 3, mean, na.rm = TRUE, fill = NA)