使用data.table滞后面板数据

时间:2012-10-22 23:23:35

标签: r time-series 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,因此我对使用它犹豫不决。

1 个答案:

答案 0 :(得分:5)

我不确定这与您的方法有多大不同,但您可以使用x

键入id的事实
x[J(1:10), lag_v := c(NA,head(v, -1)) ]

我没有测试过这是否比by更快,特别是如果它已经被锁定了。

或者,使用t(不要将函数用作变量名!)的事实是时间id

x <- data.table(id=1:10, t=rep(1:10, each=10), v=1:100)
setkey(x, t)
replacing <- J(setdiff(x[, unique(t)],1))
x[replacing, lag_v := x[replacing, v][,v]]

但是,再次使用双连接似乎效率低下