【问题标题】:Summarise monthly (seasonal) factors from an ts(rnorm) object汇总来自 ts(rnorm) 对象的每月(季节性)因素
【发布时间】:2015-04-02 00:42:14
【问题描述】:

我正在尝试使用 dplyr 和 ts 包制作每月因子变量。

这意味着:

  1. 取 Y 年月的平均值
  2. 对所有 ^1 求和(12 个,每个月一个)
  3. 每个月将 1 除以 2

所以,如果每个月都有数值,那么三月的因子就是

3/总和(1:12) [1] 0.03846154

或 3.8%。

我觉得这应该很直截了当,但我把事情搞砸了,不知道为什么(也许是期中考试):

x <- ts(matrix(rnorm(300,100,3)), start = c(1961,1), frequency = 12) y 
y <- x  %>% summarise(month_factor = for (i in z) mean(i)) 
Error in UseMethod("summarise_") :    no applicable method for 'summarise_' applied to an object of class "ts"

我知道这第一次尝试非常不合标准,但我遇到了无法使用 mutate 的复合问题,因为月份是我在上面构建的 ts 对象 x 中的列。

【问题讨论】:

  • 试着把它变成一个矩阵。
  • 无意羞辱。当我第一次遇到类似问题时,我花了几分钟才找到该解决方案。
  • 关于这些问题的协议是什么 - 删除?
  • 如果你有一个可以用代码举例说明的解决方案,你可以搜索它是否容易出现,如果没有,然后在适当的时间间隔后发布你自己的答案(几个小时我想想),你可以勾选它。我进行了搜索以查看是否可以找到我记得发布但找不到的答案。也许这是我在 rhelp 上的答案之一?

标签: r time-series dplyr summary


【解决方案1】:

例如:

x <- ts(matrix(rnorm(300,100,3)), start = c(1961,1), frequency = 12) 

按照 BondedDust 的建议,您可以将 x 转换为矩阵:

m <- matrix(data = as.numeric(x), ncol = 12, byrow = TRUE)

按季节平均值调整:

m = m/matrix(colMeans(m, na.rm = TRUE), ncol = 12, nrow=nrow(m), byrow = TRUE)

转换回ts:

y = ts(data = as.numeric(m), start = start(x), frequency = 12)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2017-03-26
相关资源
最近更新 更多