假设时间序列ts的频率(ts)= 52:
Time Series:
Start = c(2010, 34)
End = c(2013, 25)
Frequency = 52
...
我想聚合ts,使得频率(ts)= 12。
如果新频率除以旧频率,可以使用
aggregate(ts, nfrequency = k, FUN = sum)
但如果老频率mod新频率> 0它不起作用:
> ts <- aggregate(ts, nfrequency = 12, FUN = sum)
Error in aggregate.ts(ts, nfrequency = 12, FUN = sum) :
cannot change frequency from 52 to 12
我可以设想循环遍历时间序列并决定每个值是完全添加还是一小部分,但我肯定不是第一个满足该要求的。那么有任何预定义的函数吗?
答案 0 :(得分:7)
是的,预定义的函数通常在任何时间段内按月进行聚合。您可以使用xts
包对于时间序列操作非常方便。
例如,您可以使用apply.monthly
:
library(xts)
ts.month <- apply.monthly(as.xts(ts),FUN=sum)
答案 1 :(得分:2)
作为mentioend,如果你不介意加载另一个包,我建议使用 zoo 中的聚合函数或 xts 中的类似函数。无论如何,您可能还需要这些软件包,特别是如果您遇到不规则的时间序列数据。以下是使用动物园跟随 xts 汇总到每月时间序列的示例:
<强>动物园:强>
monthlyTS <- aggregate(dailyTS, as.yearmon, sum)
<强> XTS:强>
monthlyTS <- apply.monthly(xts(dailyTS), mean)
纯粹的语法糖! xts 的真正优点是你可以按周聚合。但是,将新的聚合函数添加到 zoo 函数中也是微不足道的。
干杯,
亚当