ran*_*tic 1 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 )
Run Code Online (Sandbox Code Playgroud)
我期望mean2从不同的mean1,因为mean2有每天,而不是一两点意见.但是,似乎rollapply使用行来定义窗口而不是来自zoo对象的时间.有解决办法吗?或者,我应该使用其他一些功能代替rollapply?
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)
Run Code Online (Sandbox Code Playgroud)