落后于data.table R.

Ale*_*lex 7 r data.table

目前,我有一个效用函数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)))
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以从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
Run Code Online (Sandbox Code Playgroud)

这要求我检查内部panel_lag是否x有键.有没有更好的方法来做滞后?这些表往往很大,所以它们应该真正被键入.我迟到setkey之前就做了.我想确保我不会忘记关键.所以我想知道人们是否有这样的标准方式.

Blu*_*ter 4

如果您想确保滞后于其他列的顺序,您可以使用以下order函数:

x[order(dte),L1_a:=panel_lag(a,1)]
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以执行 `setkey(x,dte)[,L1_a:=panel_lag(a,1)]` 来在一行中键入和滞后。我会与包所有者核实,但我认为如果“x”已经按日期键入,则不会增加开销。 (2认同)