目前我有一个效用函数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
是否已键入。有没有更好的方法来做滞后?这些表往往很大,所以它们应该真正被键入。我迟到之前只做{{1}}。我想确保我不会忘记关键。所以我想知道人们是否采用标准方式。
答案 0 :(得分:4)
如果您想确保按其他列的顺序延迟,可以使用order
函数:
x[order(dte),L1_a:=panel_lag(a,1)]
虽然如果你按照日期顺序做了很多事情,那么以这种方式键入它是有意义的。