我有一个数据集,数据空间不相等,而且经常每天发生不止一次的观测。我想将一个函数应用到我的数据窗口,但我希望这些窗口是按时间而不是按行定义的。例如,我想在我的数据集中计算第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
发布于 2014-07-17 16:15:16
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)https://stackoverflow.com/questions/24807580
复制相似问题