2013-08-26 49 views
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 

我例如审查不同毫安的可能性包预测,并找不到如何涵盖此用例。请注意,对我来说关键的要求是为系列的最后一个元素设置有效的非NA值,换句话说,我希望我的MA能够在不“展望未来”的情况下产生有效的结果。

回答

2

看看从动物园包rollmean功能

> 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 
+1

您可以使用'* r'版本作为'align ='right''的快捷键。例如。 'rollapplyr','rollmeanr'等。 –

1

我想用stats::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