Şu anda lags
öğesinin data.table
grubuna göre bir yardımcı işlevine sahibim. fonksiyonu basit: O zaman bir data.table
bu çağırabilirsinizdata.table'da gecikme var 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)))
}
}
:
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
Bu benim x
anahtarlı olup olmadığını panel_lag
iç kontrol gerektirir. Gecikme yapmak için daha iyi bir yolu var mı? Tablolar büyük olma eğilimindedir, bu yüzden gerçekten anahtarlanması gerekir. Sadece gecikmeden önce setkey
yapıyorum. Onları tuşlamayı ihmal etmediğime emin olmak isterim. Bu yüzden, insanların bunu yapmasının standart bir yolu olup olmadığını bilmek istiyorum. Eğer tarih düzenine mantıklı olur içinde çok şey yapıyoruz eğer
x[order(dte),L1_a:=panel_lag(a,1)]
olsa: Eğer başka sütunun sırayla gecikme sağlamak istiyorsanız
+1 x 'anahtarlıysa, ancak başka bir sütunla (dte değil) kaza sonucu ne olur? –
@MatthewDowle: evet, bu tam olarak doğru .. başka bir sorun. Bu fonksiyonun, anahtarın – Alex
anahtar olup olmadığını kontrol etmek için sıralama sütununun ismini kabul etmesi gerektiğinden şüpheleniyorum. Eğer dte bir 3 sütun anahtarının 3. sütunu ise ve sorgu '= = 2 sütununda ise anahtar? Yani anahtar kullanılmaz, ancak 'x' anahtarlanır ve anahtarda dte bulunur. –