我目前落後於下述方式使用data.table
面板數據:滯後面板數據data.table
require(data.table)
x <- data.table(id=1:10, t=rep(1:10, each=10), v=1:100)
setkey(x, id, t) #so that things are in increasing order
x[,lag_v:=c(NA, v[1:(length(v)-1)]),by=id]
我想知道是否有更好的方法來做到這一點?我在網上發現了一些關於交叉連接的內容,這很有道理。但是,交叉連接會爲大數據集生成一個相當大的data.table
,所以我很猶豫要使用它。
'V [1 :(length(v)-1)]'是危險的(考慮一個單行的'id'會發生什麼)。如下所示使用'head(v,-1)'是正確的選擇。 – flodel
是的,非常好的一點!謝謝。 – Alex
我應該只是提到,在我的代碼我做如果(長(V)> 1){} ..但'頭'解決方案肯定是更好 – Alex