data.table 滞后运算符抛出错误
data.table lag operator throwing error
您好,我正在尝试创建一个 data.table,其中包含按组 ID 滞后的变量。某些 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。任何帮助将不胜感激。
谢谢,
阿信
感谢您的报告。现在已修复(data.table v1.9.5 中的问题 #1014) with commit #1722。
现在按预期工作:
dt
# id week sales lag_sales_1 lag_sales_2
# 1: 1 2014-11-11 1 NA NA
您好,我正在尝试创建一个 data.table,其中包含按组 ID 滞后的变量。某些 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。任何帮助将不胜感激。
谢谢, 阿信
感谢您的报告。现在已修复(data.table v1.9.5 中的问题 #1014) with commit #1722。
现在按预期工作:
dt
# id week sales lag_sales_1 lag_sales_2
# 1: 1 2014-11-11 1 NA NA