落后于data.table R.

时间:2013-01-17 16:02:37

标签: 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))) } } 项内容。功能很简单:

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}}。我想确保我不会忘记关键。所以我想知道人们是否采用标准方式。

1 个答案:

答案 0 :(得分:4)

如果您想确保按其他列的顺序延迟,可以使用order函数:

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

虽然如果你按照日期顺序做了很多事情,那么以这种方式键入它是有意义的。