2013-08-26 85 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