随着R的变化周期的移动平均值

时间:2014-07-08 09:48:19

标签: r mean moving-average rollapply

我有一个名为abc的数据框,我使用rollapply进行移动平均。以下代码有效:

forecast <- rollapply(abc, width=12, FUN=mean, align = "right", fill=NA)

现在,我想做同样的事情,宽度是可变的,即第一个月,它将是空的,第二个月,第一个月的价值将会到来。对于第三个月,它将是(第一个月+第二个月/ 2),即第i个月,如果i<=12,则值为(sum(1:i-1)/(i-1))i>=12它将是forecast完成的过去12个月的平均值。请帮忙。

1 个答案:

答案 0 :(得分:4)

以下是一些appraoches:

1)partial = TRUE

n <- length(x)
c(NA, rollapplyr(x, 12, mean, partial = TRUE)[-n])

请注意rollapplyr末尾的r。

2)宽度为列表 width的{​​{1}}参数可以是一个列表,使得第i个列表元素是用于第i个滚动的偏移量的向量计算。如果我们指定partial = TRUE,那么将忽略在向量末尾运行的偏移量。如果我们只在列表中指定一个元素,它将被回收:

rollapply

2a)我们可以将其写出来,而非依赖于rollapply(x, list(-seq(12)), mean, partial = TRUE, fill = NA) 。在这里,我们希望partial可以像这样计算:

width <- list(numeric(0), -1, -(1:2), -(1:3), ..., -(1:12), ..., -(1:12))

如果您想略微修改规范,那么这个主要是有意义的,因为它非常灵活。

注意:在评论的后面,海报要求提供相同的滚动平均值,除非它不会滞后。那就是:

width <- lapply(seq_along(x), function(x) -seq_len(min(12, x-1)))
rollapply(x, width, mean)

请注意rollapplyr(x, 12, mean, partial = TRUE) 末尾的r。

更新一些改进和其他解决方案。