【问题标题】:Aggregate time series from weeks to month从周到月的聚合时间序列
【发布时间】:2013-11-26 16:07:18
【问题描述】:

假设时间序列 ts 的频率 (ts) = 52:

Time Series:
Start = c(2010, 34) 
End = c(2013, 25) 
Frequency = 52 
...

我想聚合 ts 使得频率 (ts) = 12。

如果新频率除旧频率,可以使用

aggregate(ts, nfrequency = k, FUN = sum)

但是如果 old frequency mod new frequency > 0 它不起作用:

> ts <- aggregate(ts, nfrequency = 12, FUN = sum)
Error in aggregate.ts(ts, nfrequency = 12, FUN = sum) : 
cannot change frequency from 52 to 12

我可以想象循环遍历时间序列并决定每个值是完全添加还是添加一部分,但我肯定不是第一个有这种要求的人。那么是否有任何预定义的功能呢?

【问题讨论】:

    标签: r time-series aggregate


    【解决方案1】:

    是的,有预定义的函数按月或更一般地按任何时间段进行聚合。您可以使用xts 包非常方便地进行时间序列操作。

    例如,您可以使用apply.monthly

    library(xts)
    ts.month <- apply.monthly(as.xts(ts),FUN=sum)
    

    【讨论】:

    • 对不起,它对我不起作用:a
    • 是频率问题。例如:as.xts(ts(1:4,start=c(1,6), end=c(2,5), frequency=4))。您应该使用 xts 构造函数创建一个常规时间序列。请参阅 xts 帮助。
    【解决方案2】:

    请注意,如果您不介意加载另一个包,我建议使用 zoo 中的聚合函数或 xts 中的类似函数。无论如何,您可能都需要这些包,尤其是当您遇到参差不齐的时间序列数据时。以下是使用 zoo 后跟 xts 聚合到每月时间序列的示例:

    动物园:

    monthlyTS <- aggregate(dailyTS, as.yearmon, sum)
    

    xts:

    monthlyTS <- apply.monthly(xts(dailyTS), mean)
    

    纯语法糖! xts 的真正好处在于您可以按周汇总。但是,向 zoo 函数添加新的聚合函数也很简单。

    干杯,

    亚当

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2013-04-28
      • 2015-10-11
      • 2023-03-07
      • 2014-08-17
      • 2018-07-24
      相关资源
      最近更新 更多