有一些方法來rollapply使用(從zoo
包或類似的東西)進行了優化函數(rollmean
,rollmedian
等)來計算與基於時間的窗口的滾動的功能,而不是一個基於一些觀察?我想要的很簡單:對於不規則時間序列中的每個元素,我想要計算具有N天窗口的滾動函數。也就是說,該窗口應包括在當前觀測之前N天的所有觀測值。時間序列也可能包含重複項。優化軋製功能與基於時間的窗口
下面是一個例子。考慮下面的時間序列:
date value
1/11/2011 5
1/11/2011 4
1/11/2011 2
8/11/2011 1
13/11/2011 0
14/11/2011 0
15/11/2011 0
18/11/2011 1
21/11/2011 4
5/12/2011 3
的滾動平均有5天的窗口,右對齊,應該產生以下計算:
> c(
median(c(5)),
median(c(5,4)),
median(c(5,4,2)),
median(c(1)),
median(c(1,0)),
median(c(0,0)),
median(c(0,0,0)),
median(c(0,0,0,1)),
median(c(1,4)),
median(c(3))
)
[1] 5.0 4.5 4.0 1.0 0.5 0.0 0.0 0.0 2.5 3.0
我已經找到了一些解決方案,在那裏,但他們通常很棘手,通常意味着緩慢。我設法實現了我自己的滾動函數計算。問題在於,對於很長的時間系列,中值(rollmedian)的優化版本會產生巨大的時間差,因爲它考慮到了窗口之間的重疊。我想避免重新實現它。我懷疑有一些關於rollapply參數的技巧可以使它工作,但我無法弄清楚。先謝謝您的幫助。
用'rollapply'無法做到這一點。你可以使用'window'滾動你自己的函數(雙關語意)。 –
這個問題和答案是否有任何幫助? http://stackoverflow.com/questions/10465998/sliding-time-intervals-for-time-series-data-in-r – thelatemail
如果你使用'median'作爲FUN,通過調用'rollmedian''' rollapply''作弊「 。比較:'system.time(rollapply(runif(100000),5,function(x)median(x)))''system.time(rollapply(runif(100000),5,median))'(前者是30x比較慢)。如果您希望速度與「rollapply」在沒有「欺騙」的情況下實現的速度相當,我可以提供一些解決方案。此外,「rollmedian」也會「欺騙」它,因爲它需要奇怪的觀察結果,所以顯然它只是定義了「中間」值的索引,這與您正在嘗試執行的操作相比是微不足道的。 – BrodieG