目前,我有一个实用函数,它可以在data.table
中分组lags
东西。函数很简单:
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
。我想确保我不会忘记键入它们。所以我想知道人们是否有一种标准的方式来做这件事。
发布于 2013-01-17 16:10:15
如果您希望确保按其他列的顺序进行滞后,可以使用order
函数:
x[order(dte),L1_a:=panel_lag(a,1)]
但是,如果您正在按日期顺序做很多事情,那么按这种方式键入将是有意义的。
https://stackoverflow.com/questions/14383095
复制