如何创建一个 wave 变量,以考虑到退出并稍后返回面板的受访者?
How to create a wave variable that takes into account respondents who drop and come back later to the panel?
我正在尝试为面板数据创建一个 wave 变量。我遵循了此线程中的建议:Create a sequential number (counter) for rows within each group of a dataframe。这会产生 wave 变量,您可以在下面使用此代码的输出中看到:df = df %>% group_by(id) %>% mutate(wave = row_number())
.
但是,此变量的问题在于,当受访者离开小组一段时间然后又回来时,它不会捕获。例如,ID 1 的受访者从 2007 年到 2009 年从面板中下降并在 2010 年返回,使用上述代码的 wave 变量生成 3,而实际上它是 real_wave 变量中所示的 wave 6。有人可以让我知道是否有办法使用 dplyr 在 real_wave 变量中实现输出?
id year wave real_wave
1 2005 1 1
1 2006 2 2
1 2010 3 6
2 2008 1 1
2 2009 2 2
2 2012 3 5
structure(list(id = structure(c(1, 1, 1, 2, 2, 2), format.stata = "%9.0g"),
year = structure(c(2005, 2006, 2010, 2008, 2009, 2012), format.stata = "%9.0g"),
wave = structure(c(1, 2, 3, 1, 2, 3), format.stata = "%9.0g"),
real_wave = structure(c(1, 2, 6, 1, 2, 5), format.stata = "%9.0g")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
听起来您需要的不是行号,而是每组中第一项的差异(加上一个,因为您从 1 开始计数)。因此:
df <- df %>% group_by(id) %>%
mutate(wave = year - first(year) + 1)
给予
> df
# A tibble: 6 x 4
# Groups: id [2]
id year wave real_wave
<dbl> <dbl> <dbl> <dbl>
1 1 2005 1 1
2 1 2006 2 2
3 1 2010 6 6
4 2 2008 1 1
5 2 2009 2 2
6 2 2012 5 5
我正在尝试为面板数据创建一个 wave 变量。我遵循了此线程中的建议:Create a sequential number (counter) for rows within each group of a dataframe。这会产生 wave 变量,您可以在下面使用此代码的输出中看到:df = df %>% group_by(id) %>% mutate(wave = row_number())
.
但是,此变量的问题在于,当受访者离开小组一段时间然后又回来时,它不会捕获。例如,ID 1 的受访者从 2007 年到 2009 年从面板中下降并在 2010 年返回,使用上述代码的 wave 变量生成 3,而实际上它是 real_wave 变量中所示的 wave 6。有人可以让我知道是否有办法使用 dplyr 在 real_wave 变量中实现输出?
id year wave real_wave
1 2005 1 1
1 2006 2 2
1 2010 3 6
2 2008 1 1
2 2009 2 2
2 2012 3 5
structure(list(id = structure(c(1, 1, 1, 2, 2, 2), format.stata = "%9.0g"),
year = structure(c(2005, 2006, 2010, 2008, 2009, 2012), format.stata = "%9.0g"),
wave = structure(c(1, 2, 3, 1, 2, 3), format.stata = "%9.0g"),
real_wave = structure(c(1, 2, 6, 1, 2, 5), format.stata = "%9.0g")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
听起来您需要的不是行号,而是每组中第一项的差异(加上一个,因为您从 1 开始计数)。因此:
df <- df %>% group_by(id) %>%
mutate(wave = year - first(year) + 1)
给予
> df
# A tibble: 6 x 4
# Groups: id [2]
id year wave real_wave
<dbl> <dbl> <dbl> <dbl>
1 1 2005 1 1
2 1 2006 2 2
3 1 2010 6 6
4 2 2008 1 1
5 2 2009 2 2
6 2 2012 5 5