目前我有一个效用函数,lags
的东西在data.table
按组。函数很简单:
panel_lag <- function(var, k) {
if (k > 0) {
# Bring past values forward k times
return(c(rep(NA, k), head(var, -k)))
} else {
# Bring future values backward
return(c(tail(var, k), rep(NA, -k)))
}
}
然后我可以从data.table
调用它:
x = data.table(a=1:10,
dte=sample(seq.Date(from=as.Date("2012-01-20"),
to=as.Date("2012-01-30"), by=1),
10))
x[, L1_a:=panel_lag(a, 1)] # This won't work correctly as `x` isn't keyed by date
setkey(x, dte)
x[, L1_a:=panel_lag(a, 1)] # This will
这要求我检查panel_lag
内部x
是否被键化。是否有更好的方法来实现滞后?这些表往往很大,所以它们应该被键化。我只是做setkey
之前,我延迟。我想确保我没有忘记锁门。所以我想知道人们做这件事是否有一个标准的方法
如果您想确保您在其他列的顺序上滞后,您可以使用order
函数:
x[order(dte),L1_a:=panel_lag(a,1)]
虽然如果你要按日期顺序做很多事情,那么这样做是有意义的。