2014-04-03 39 views
5

我試圖計算的由R.東西多個維度我會做在SQL中分組方式如下值的滾動平均值:的R - AVE rollapply錯誤:克<= n不是TRUE

AVG(value) OVER 
    (PARTITION BY dim1, dim2 ORDER BY date 
     RANGE BETWEEN 5 PRECEDING AND CURRENT ROW) 

下,似乎如果我選擇只有幾個維度的工作:

s <- ave(df$value, 
    list(df$dim1, df$dim2), 
    FUN= function(x) rollapply(x, 5, mean, align='right')) 

,但提供了以下錯誤,當我選擇全套尺寸:

Error: k <= n is not TRUE 

我得到同樣的錯誤,當我運行:

rollapply(c(1:2), 3, mean, align='right') 

,所以我想這個問題是尺寸的某些組合沒有足夠的值來計算平均值。

我怎麼能克服它?作爲這些組合的結果,我很好。任何幫助將非常感激..

+1

那麼,在你的最後一個例子,你要使用的*最後三個值*在每次迭代...但迭代矢量'C(1:2)'只有兩個! –

+1

是的,我知道問題是什麼,第二個例子只是爲了說明問題。問題是,如果有幾個元素來計算rollapply而不是獲取錯誤消息,我該如何克服它並獲得NA。 – Adam

回答

2

roll_meanrRcppRoll包將在默認情況下做到這一點:

library(RcppRoll) 
> roll_meanr(c(1:2), 3) 
# [1] NA NA 
0

rollapply(c(1:10), 3, mean, align='right', fill=NA)應該做的伎倆,只要你的載體是足夠長的時間來產生的任何數據。

注意rollapply(c(1:2), 3, mean, align='right', fill=NA)仍返回錯誤由@羅伯特 - krzyzanowski陳述的理由

相關問題