data.table lag运算符抛出错误

时间:2015-01-20 19:20:44

标签: r data.table

您好我正在尝试按组ID创建一个滞后变量的data.table。某些id在data.table中只有1行,在这种情况下,滞后的移位运算符会产生错误,但是主操作符可以正常工作。这是一个例子

dt = data.table(id = 1, week = as.Date('2014-11-11'), sales = 1)
lead = 2
lag = 2
lagSalesNames = paste('lag_sales_', 1:lag, sep = '')
dt[,(lagSalesNames) := shift(sales, 1:lag, NA, 'lag'), by = list(id)]

这给了我以下错误

All items in j=list(...) should be atomic vectors or lists. If you are trying something like j=list(.SD,newcol=mean(colA)) then use := by group instead
 (much quicker), or cbind or merge afterwards.

但如果我尝试使用相同的东西,它可以正常工作

dt[,(lagSalesNames) := shift(sales, 1:lag, NA, 'lead'), by = list(id)]

如果data.table有超过1行,它似乎也可以正常工作,例如您可以尝试以下2行,这是正常的

dt = data.table(id = 1, week = as.Date(c('2014-11-11', '2014-11-11')), sales = 1:2)
dt[,(lagSalesNames) := shift(sales, 1:lag, NA, 'lag'), by = list(id)]

我在R版本3.1.0的Linux机器上使用data.table版本1.9.5。任何帮助将不胜感激。

谢谢, 阿信

1 个答案:

答案 0 :(得分:2)

感谢您的报告。现在, data.table v1.9.5中的#1014已修复(问题commit #1722)。

现在按预期工作:

dt
#    id       week sales lag_sales_1 lag_sales_2
# 1:  1 2014-11-11     1          NA          NA