2

我想计算一些时间序列数据的移动平均值(ma),但我希望 ma 考虑从我的系列最右边开始的顺序 n,所以我的最后一个 ma 值对应于我的最后 n 个值的 ma系列。所需的功能rightmost_ma将产生此输出:

data <- seq(1,10)
> data
[1]  1  2  3  4  5  6  7  8  9 10

rightmost_ma(data, n=2)
NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 

我正在审查不同的 ma 可能性,例如包预测,但找不到如何涵盖这个用例。请注意,对我来说,关键要求是对系列的最后一个元素具有有效的非 NA ma 值,或者换句话说,我希望我的 ma 产生有效的结果而不“展望未来”。

4

2 回答 2

2

看看rollmeanzoo 包中的功能

> library(zoo)
> rollmean(zoo(1:10), 2, align ="right", fill=NA)
  1   2   3   4   5   6   7   8   9  10 
 NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 

你也可以使用rollapply

> rollapply(zoo(1:10), width=2, FUN=mean, align = "right", fill=NA)
  1   2   3   4   5   6   7   8   9  10 
 NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 
于 2013-08-26T12:54:39.177 回答
1

我认为 usingstats::filter不那么复杂,并且可能具有更好的性能(尽管zoo写得很好)。

这个:

filter(1:10, c(1,1)/2, sides=1)

给出:

Time Series:
Start = 1
End = 10
Frequency = 1
[1]  NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

如果您不希望结果成为ts对象,as.vector请在结果上使用。

于 2013-08-26T22:05:42.957 回答