7

目前我有一个按组分组的实用程序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在我落后之前做。我想确保我不会忘记键入它们。所以我想知道人们是否有一种标准的方式来做到这一点。

4

1 回答 1

4

如果要确保按其他列的顺序滞后,可以使用以下order功能:

x[order(dte),L1_a:=panel_lag(a,1)]

尽管如果您按日期顺序做很多事情,那么以这种方式键入它是有意义的。

于 2013-01-17T16:10:15.367 回答