【发布时间】:2012-10-12 20:25:53
【问题描述】:
我目前使用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)是正确的做法。 -
是的,非常好!谢谢。
-
我应该在我的代码中提到,如果 (length(v)>1) {} .. 但
head解决方案肯定更好
标签: r time-series data.table