我使用的是一个面板数据,其中会随着时间的推移跟踪个人。我想检查一下受访者在一年与另一年相比是否改变了他们的答案。例如,下面的性别变量表示男性为1,女性为0。ID为1的人在2005年至2006年间将答案从男性改为女性。
由于我的data.frame中有数百万人,我想创建一个变量,对于随着时间的推移而改变答案的受访者,该变量的值为9,对于持续回答的受访者,其值为8。有人能指导我如何使用dplyr来实现这一点吗?
id year unemployment change
1 2005 1 9
1 2006 0 9
1 2007 0 9
2 2007 1 8
2 2008 1 8
structure(list(id = structure(c(1, 1, 1, 2, 2), format.stata = "%9.0g"),
year = structure(c(2005, 2006, 2007, 2007, 2008), format.stata = "%9.0g"),
unemployment = structure(c(1, 0, 0, 1, 1), format.stata = "%9.0g"),
change = structure(c(9, 9, 9, 8, 8), format.stata = "%9.0g")), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame"))
如果我们认为我们需要检测失业率的变化,而不是性别的变化,我们可以使用以下内容:
d %>%
group_by(id) %>%
mutate(change = ifelse(n_distinct(unemployment) == 1, 8, 9))
然而,我不建议使用像8和9这样的值来编码这样的更改变量,因为它不容易理解。