首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用动物园和亚日数据的rollapply

使用动物园和亚日数据的rollapply
EN

Stack Overflow用户
提问于 2014-07-17 15:21:12
回答 1查看 555关注 0票数 3

我有一个数据集,数据空间不相等,而且经常每天发生不止一次的观测。我想将一个函数应用到我的数据窗口,但我希望这些窗口是按时间而不是按行定义的。例如,我想在我的数据集中计算第1-5天、第2-6天等天的平均数,第1-5天可能对应于第1-13行,第2-6天对应于第3-18行,等等。

我看到rollapply函数接受zoo对象,并且我假设它会像我前面描述的那样工作(即在按时间定义的窗口上应用该函数,而不是通过行定义的窗口)。然而,情况似乎并非如此:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-17 16:15:16

rollapply是在?rollapply中记录的,所以没有必要猜测它是如何工作的。

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

代码语言:javascript
复制
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)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24807580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档