嗨我想創建一個data.table與滯後變量組ID。某些id在data.table中只有一行,在這種情況下,lag的移位運算符會給出錯誤,但前導運算符工作正常。下面是一個例子data.table滯後運算符拋出錯誤
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行,例如你可以嘗試以下兩行工作正常
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次,它會在前兩次運行,然後在最後一次嘗試中返回一個錯誤。 – 2015-01-20 20:32:53
是的,我也遇到一些奇怪的行爲。例如,對於某些情況,代碼運行lag = 2,但是如果我將lag = 6引發了分段錯誤 – 2015-01-20 20:58:57
感謝Arun查看它。 – 2015-01-20 22:59:44