現在、グループごとに入れるユーティリティ関数があり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
遅れる前にやるだけです。キーを付けるのを忘れないようにしたいと思います。だから私は人々がこれを行う標準的な方法があるかどうか知りたいです。