我想創建一個變量,其中包含組內前一年的變量值。在R中創建不平衡面板數據中的滯後變量
id date value
1 1 1992 4.1
2 1 NA 4.5
3 1 1991 3.3
4 1 1990 5.3
5 1 1994 3.0
6 2 1992 3.2
7 2 1991 5.2
value_lagged
應該丟失時前一年的一個組內的缺失 - 或者是因爲它是一組內的第一個日期(如在第4行,7),或因爲在數據年間隙(如第5行)。此外,當前時間丟失時應丟失value_lagged
(如第2行)。
這給:
id date value value_lagged
1 1 1992 4.1 3.3
2 1 NA 4.5 NA
3 1 1991 3.3 5.3
4 1 1990 5.3 NA
5 1 1994 3.0 NA
6 2 1992 3.2 5.2
7 2 1991 5.2 NA
就目前而言,R,我用的是data.table
包
DT = data.table(id = c(1,1,1,1,1,2,2),
date = c(1992,NA,1991,1990,1994,1992,1991),
value = c(4.1,4.5,3.3,5.3,3.0,3.2,5.2)
)
setkey(DT, id, date)
DT[, value_lagged := DT[J(id, date-1), value], ]
DT[is.na(date), value_lagged := NA, ]
它速度快,但它似乎有點容易出錯給我。我想知道是否有更好的選擇使用data.table
,dplyr
或任何其他包。非常感謝!
在Stata
,一個會做:
tsset id date
gen value_lagged=L.value
除非特別希望具有缺少**值的行**不具有匹配的滯後值,否則可能意味着使用'is.na(日期)'而不是'is.na(值)' – 2014-09-03 16:28:46
是,更正。謝謝。 – Matthew 2014-09-03 16:29:53
@Matthew看起來像你已經有一個體面的解決方案 - 你想改善什麼呢? – eddi 2014-09-03 17:59:34