3

我有一个数据集具有不等间隔的观察结果,并且观察结果经常每天发生不止一次。我想将一个函数应用于我的数据窗口,但我希望这些窗口是按时间而不是按行定义的。例如,我想在我的数据集中计算第 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 )

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

4

1 回答 1

6

rollapply已记录在案,?rollapply因此无需猜测它是如何工作的。

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

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)
于 2014-07-17T16:15:16.183 回答