R - ave rollapply错误:k< = n不为TRUE

时间:2014-04-03 18:16:09

标签: r rollapply

我正在尝试计算R中按多个维度分组的滚动均值。我将通过以下方式在SQL中执行此操作:

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')

所以我猜问题是某些维度组合没有足够的值来计算均值。

我怎么能克服它?我很好,因为这些组合有一个NA。任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:3)

默认情况下,roll_meanr包中的

RcppRoll会执行此操作:

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

答案 1 :(得分:0)

如果您的向量足够长以产生任何数据,

rollapply(c(1:10), 3, mean, align='right', fill=NA)应该可以做到这一点。

请注意rollapply(c(1:2), 3, mean, align='right', fill=NA)仍然会返回错误,原因是@ robert-krzyzanowski