Ale*_*lex 4 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]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来做到这一点?我在网上找到了关于交叉连接的东西,这是有道理的.但是,交叉连接会data.table为大型数据集生成相当大的数据集,所以我对使用它犹豫不决.
我不确定这与你的方法有多大不同,但你可以使用x键入的事实id
x[J(1:10), lag_v := c(NA,head(v, -1)) ]
Run Code Online (Sandbox Code Playgroud)
我还没有测试过它是否比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]]
Run Code Online (Sandbox Code Playgroud)
但同样,在这里使用双连接似乎效率低下