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

6

我正在尝试在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作为结果。任何帮助都将不胜感激。


1
好的,在你最后一个例子中,你试图在每次迭代中使用最后三个值...但是迭代向量c(1:2)只有两个! - Robert Krzyzanowski
1
是的,我知道问题出在哪里了,第二个例子只是为了说明它。问题是,如果要计算rollapply的元素太少而无法计算,则如何克服它并获得NA,而不是收到错误消息。 - Adam
2个回答

3

RcppRoll包中的roll_meanr将默认执行此操作:

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)仍然会返回错误,原因是@robert-krzyzanowski所述的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接