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 に答える