gpt4 book ai didi

r - 在 R 中的不平衡面板数据中创建滞后变量

转载 作者:行者123 更新时间:2023-12-04 00:38:19 30 4
gpt4 key购买 nike

我想创建一个变量,其中包含一个组中前一年的变量值。

     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

最佳答案

我可能会使用连接来解决这个问题:

library(dplyr)

df <- data.frame(
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)
)


last_year <- df %>%
filter(!is.na(date)) %>%
mutate(date = date + 1, lagged_value = value, value = NULL)

df %>%
left_join(last_year)
#> Joining by: c("id", "date")
#> id date value lagged_value
#> 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 - 在 R 中的不平衡面板数据中创建滞后变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649056/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com