目前我有一個實用功能lags
data.table
按組。功能很簡單:滯後data.table R
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如果'x'被鍵入,但是被另一列(而不是'dte')意外? –
@MatthewDowle:是的,這是完全正確的..這是另一個問題。我懷疑我可能必須讓該函數接受排序列的名稱,以檢查它是否爲鍵 – Alex
如果'dte'是3列鍵的第3列,而查詢做了'by ='第二列鑰匙?即密鑰沒有被使用,但'x'被鍵入並且'dte'在密鑰中。 –