r - 如何替换第一个事件中缺失的观测值的缺失值?
问题描述
我在面板数据中输入了一个社会阶层变量。我想用第一波出现的第一个社会等级替换所有社会等级变量。但是,有些人在第一波中丢失了数据。我还想估算这些人的社会等级,但仅在社会等级变量第一次出现之后。如果我使用以下命令:
df %>%
group_by(id) %>%
dplyr::mutate(class_imputed = first(class))
# Groups: id [4]
id wave year class class_imputed
<dbl> <dbl> <dbl> <fct> <fct>
1 1 1 2007 3 3
2 1 2 2008 2 3
3 1 3 2009 2 3
4 1 4 2010 2 3
5 2 1 2005 . .
6 2 2 2006 2 .
7 2 3 2007 3 .
8 2 4 2008 . .
9 3 1 2007 . .
10 3 2 2008 . .
11 3 3 2009 1 .
12 3 4 2010 1 .
13 4 1 2009 2 2
14 4 2 2010 . 2
15 4 3 2011 3 2
16 4 4 2012 . 2
我们可以看到 ID 为 2 和 3 的人没有被估算。但我只想估算第一次观察到社会阶层变量的时期。这意味着 ID 号为 2 的人只会在 2006 年、2007 年和 2008 年获得社会等级 = 2,但在 2005 年不会。有人可以帮忙吗?
这是数据:
structure(list(id = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4,
4, 4, 4), wave = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2,
3, 4), year = c(2007, 2008, 2009, 2010, 2005, 2006, 2007, 2008,
2007, 2008, 2009, 2010, 2009, 2010, 2011, 2012), class = structure(c(4L,
3L, 3L, 3L, 1L, 3L, 4L, 1L, 1L, 1L, 2L, 2L, 3L, 1L, 4L, 1L), .Label = c(".",
"1", "2", "3"), class = "factor"), class_imputed = structure(c(3L,
3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c(".",
"2", "3"), class = "factor")), row.names = c(NA, -16L), class = "data.frame")
解决方案
你可以试试这个选项 -
library(dplyr)
df %>%
group_by(id) %>%
dplyr::mutate(class_imputed = replace(class,
row_number() > match(TRUE, class != '.'),
class[class != '.'][1]))
# id wave year class class_imputed
# <dbl> <dbl> <dbl> <fct> <fct>
# 1 1 1 2007 3 3
# 2 1 2 2008 2 3
# 3 1 3 2009 2 3
# 4 1 4 2010 2 3
# 5 2 1 2005 . .
# 6 2 2 2006 2 2
# 7 2 3 2007 3 2
# 8 2 4 2008 . 2
# 9 3 1 2007 . .
#10 3 2 2008 . .
#11 3 3 2009 1 1
#12 3 4 2010 1 1
#13 4 1 2009 2 2
#14 4 2 2010 . 2
#15 4 3 2011 3 2
#16 4 4 2012 . 2
match(TRUE, class != '.')
将返回值不是的第一个位置,'.'
并将class[class != '.'][1]
返回要估算的值,即第一个社会阶层变量。