如何使用 dplyr 检测面板数据中变量随时间的变化?
How to detect a change in a variable over time in panel-data using dplyr?
我使用的是面板数据,年龄变量存在一些差异。对于一些受访者,他们的年龄从一年到另一年增加或减少超过 1,正如我们在下面 ID 号 2 和 3 的受访者中看到的那样。可能是数据录入问题或者其他我自己解决不了的问题
有人可以指导我如何创建一个新变量来检测年龄增加超过 1 个值或年龄从一岁减少到另一岁的人,就像 ID 中发生的那样下面的 2 和 3?
id age year
1 25 2005
1 26 2006
1 27 2007
2 50 2006
2 51 2007
2 36 2008
3 25 2005
3 30 2006
structure(list(id = structure(c(1, 1, 1, 2, 2, 2, 3, 3), format.stata = "%9.0g"),
age = structure(c(25, 26, 27, 50, 51, 36, 25, 30), format.stata = "%9.0g"),
year = structure(c(2005, 2006, 2007, 2006, 2007, 2008, 2005,
2006), format.stata = "%9.0g")), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"))
您可以使用 group_by
和 lag
来检查更改。
df %>%
arrange(id, year) %>%
group_by(id) %>%
mutate(
age_change = age - lag(age),
age_bigincrease = age_change > 1,
age_decrease = age_change < 0
)
会return
# A tibble: 8 x 6
# Groups: id [3]
id age year age_change age_bigincrease age_decrease
<dbl> <dbl> <dbl> <dbl> <lgl> <lgl>
1 1 25 2005 NA NA NA
2 1 26 2006 1 FALSE FALSE
3 1 27 2007 1 FALSE FALSE
4 2 50 2006 NA NA NA
5 2 51 2007 1 FALSE FALSE
6 2 36 2008 -15 FALSE TRUE
7 3 25 2005 NA NA NA
8 3 30 2006 5 TRUE FALSE
我使用的是面板数据,年龄变量存在一些差异。对于一些受访者,他们的年龄从一年到另一年增加或减少超过 1,正如我们在下面 ID 号 2 和 3 的受访者中看到的那样。可能是数据录入问题或者其他我自己解决不了的问题
有人可以指导我如何创建一个新变量来检测年龄增加超过 1 个值或年龄从一岁减少到另一岁的人,就像 ID 中发生的那样下面的 2 和 3?
id age year
1 25 2005
1 26 2006
1 27 2007
2 50 2006
2 51 2007
2 36 2008
3 25 2005
3 30 2006
structure(list(id = structure(c(1, 1, 1, 2, 2, 2, 3, 3), format.stata = "%9.0g"),
age = structure(c(25, 26, 27, 50, 51, 36, 25, 30), format.stata = "%9.0g"),
year = structure(c(2005, 2006, 2007, 2006, 2007, 2008, 2005,
2006), format.stata = "%9.0g")), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"))
您可以使用 group_by
和 lag
来检查更改。
df %>%
arrange(id, year) %>%
group_by(id) %>%
mutate(
age_change = age - lag(age),
age_bigincrease = age_change > 1,
age_decrease = age_change < 0
)
会return
# A tibble: 8 x 6
# Groups: id [3]
id age year age_change age_bigincrease age_decrease
<dbl> <dbl> <dbl> <dbl> <lgl> <lgl>
1 1 25 2005 NA NA NA
2 1 26 2006 1 FALSE FALSE
3 1 27 2007 1 FALSE FALSE
4 2 50 2006 NA NA NA
5 2 51 2007 1 FALSE FALSE
6 2 36 2008 -15 FALSE TRUE
7 3 25 2005 NA NA NA
8 3 30 2006 5 TRUE FALSE