【发布时间】:2015-01-20 19:20:43
【问题描述】:
您好,我正在尝试按组 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。任何帮助将不胜感激。
谢谢, 阿信
【问题讨论】:
-
这是非常奇怪的行为。如果我连续运行 3 次,它会在前两次运行,然后在最后一次尝试时返回错误。
-
是的,我也遇到了一些奇怪的行为。例如,在某些情况下代码运行为 lag = 2 但如果我输入 lag = 6 它会引发分段错误
-
感谢 Arun 调查。
标签: r data.table