您好我正在尝试按组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。任何帮助将不胜感激。
谢谢, 阿信
答案 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