【发布时间】:2016-09-12 22:56:02
【问题描述】:
我有一个多年 (1985-2010) 时间序列的每日数据,我想以 8 天为间隔进行汇总。问题是我对分析年度结果很感兴趣,所以每年的第一个间隔应该从 1 月 1 日开始。
如果我构造一个示例动物园对象:
library(zoo)
indices <- seq.Date(as.Date("1985-01-01"), as.Date("1988-12-31"), by = 'day')
a.zoo <- zoo(rnorm(length(indices)), order.by = indices)
head(a.zoo)
1985-01-01 1985-01-02 1985-01-03 1985-01-04 1985-01-05 1985-01-06
0.47454560 -1.10429098 -1.27926702 0.46199385 -0.12975014 0.03752185
然后我可以使用 rollapply 来获得一部分:
rollapply(a.zoo, 8, by=8, by.column=FALSE, FUN=function(x) mean(x), align = "left")
但年份之间没有区别,因此第一个年度间隔的开始日期会有所不同。如果我将动物园对象转换为数据框,我可以使用 plyr 命令按年份应用该函数:
library(plyr)
a.df <- data.frame(date = time(a.zoo),
data = a.zoo,
check.names = F,
row.names = NULL)
a.8 <- dlply(a.df, .(format(date, "%Y")),
function(x) {split(x$data, ceiling(seq_along(x$data)/8))})
a8.mean <- rapply(a.8, mean, na.rm = T)
head(a8.mean)
1985.1 1985.2 1985.3 1985.4 1985.5 1985.6
-0.2744355 0.3103211 0.2057675 -0.1537141 0.6807115 -0.1581474
但我丢失了日期信息。有没有人对如何调整一种方法或另一种方法有任何建议(或者可以提供一个新的、更绝妙的想法),以便我从每年 1 月 1 日开始每隔 8 天获得时间标记数据?感谢您的帮助!
【问题讨论】:
标签: r time-series