我想在一个组中创建一个包含上一年变量值的变量。
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