【问题标题】:R - ave rollapply error: k <= n is not TRUER - ave rollapply 错误:k <= n 不是 TRUE
【发布时间】:2014-04-03 18:16:09
【问题描述】:

我正在尝试计算 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。任何帮助将不胜感激..

【问题讨论】:

  • 好吧,在您的最后一个示例中,您尝试在每次迭代中使用 最后三个值...但迭代向量 c(1:2) 只有两个!跨度>
  • 是的,我知道问题出在哪里,第二个例子只是为了说明它。问题是,如果要计算 rollapply 的元素很少而不是收到错误消息,我该如何克服它并获得 NA。

标签: r rollapply


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    rollapply(c(1:10), 3, mean, align='right', fill=NA) 应该可以解决问题,前提是您的向量足够长以生成任何数据。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2018-05-26
      • 2018-10-26
      相关资源
      最近更新 更多