定义roll=-Inf时,我无法使rollends=FALSE工作。如果未设置rollends或将其设置为TRUE,则可以看到预期的结果。我将不胜感激任何建议。

library(data.table)

dt1 = data.table(Date=seq(from=as.Date("2013-01-03"),
                          to=as.Date("2013-06-27"), by="1 week"),
                 key="Date")[, ind:=.I]
dt2 = data.table(Date=seq(from=as.Date("2013-01-01"),
                          to=as.Date("2013-06-30"), by="1 day"),
                 key="Date")


我希望在下面的输出中看到2013-01-052013-06-26填充。

dt1[dt2, roll=-Inf, rollends=FALSE]
           Date ind
  1: 2013-01-01  NA
  2: 2013-01-02  NA
  3: 2013-01-03   1
  4: 2013-01-04   2
  5: 2013-01-05  NA
 ---
177: 2013-06-26  NA
178: 2013-06-27  26
179: 2013-06-28  NA
180: 2013-06-29  NA
181: 2013-06-30  NA


这可以按预期工作,ind数据会前滚,但不会超出dt1 data.table定义的端点之外。

dt1[dt2, roll=-Inf]
           Date ind
  1: 2013-01-01   1
  2: 2013-01-02   1
  3: 2013-01-03   1
  4: 2013-01-04   2
  5: 2013-01-05   2
 ---
177: 2013-06-26  26
178: 2013-06-27  26
179: 2013-06-28  NA
180: 2013-06-29  NA
181: 2013-06-30  NA

最佳答案

你是对的。这看起来像个错误。

更新:现在已在v1.8.11中修复(提交980)。从NEWS


如果键入X[Y,roll=-Inf,rollends=FALSE],则Y不能正确滚动中间位置。取消键设置为Y或将rollends保留为默认值[c(TRUE,FALSE)时为roll<0]是可以的。感谢user338714报告。测试已添加。


感谢您提出的好问题!

07-27 13:16