如何填补按单位和时间分组的面板数据中的缺失?
How to fill missings in paneldata grouped by unit and time?
我有面板数据。在问卷调查中(大概是不变的)数据有时不会在每一波中被询问。一个很好的例子是性别。假设我有一个人 3 个时期的数据,但只观察了一次性别。它可以在任何时期。缺失是随机的,它们可以在列中的任何位置。
paneldata = data.frame(id=c(1,1,1,2,2,2,3,3,3), time=seq(1:3), gender=c(1,1,1,2,NA,2,1,NA,NA))
library(dplyr)
paneldata %>% group_by(id,time)
我需要找到类似 "by unit and time: copy the value you find anywhere in the column in all NA-fields" 的内容。
id+time 组仅包含您要替换的 NA,因此我假设您想要从 id组。
以下是用第一个非缺失观察值替换组中所有值的方法。
编辑:shs 在下面的评论中有更好的解决方案。请注意,非缺失值也会被替换,因此请确保变量实际上是不变的。
paneldata %>%
group_by(id) %>%
mutate(gender = first(na.omit(gender)))
# A tibble: 9 x 3
# Groups: id [3]
id time gender
<dbl> <int> <dbl>
1 1 1 1
2 1 2 1
3 1 3 1
4 2 1 2
5 2 2 2
6 2 3 2
7 3 1 1
8 3 2 1
9 3 3 1
我有面板数据。在问卷调查中(大概是不变的)数据有时不会在每一波中被询问。一个很好的例子是性别。假设我有一个人 3 个时期的数据,但只观察了一次性别。它可以在任何时期。缺失是随机的,它们可以在列中的任何位置。
paneldata = data.frame(id=c(1,1,1,2,2,2,3,3,3), time=seq(1:3), gender=c(1,1,1,2,NA,2,1,NA,NA))
library(dplyr)
paneldata %>% group_by(id,time)
我需要找到类似 "by unit and time: copy the value you find anywhere in the column in all NA-fields" 的内容。
id+time 组仅包含您要替换的 NA,因此我假设您想要从 id组。
以下是用第一个非缺失观察值替换组中所有值的方法。
编辑:shs 在下面的评论中有更好的解决方案。请注意,非缺失值也会被替换,因此请确保变量实际上是不变的。
paneldata %>%
group_by(id) %>%
mutate(gender = first(na.omit(gender)))
# A tibble: 9 x 3
# Groups: id [3]
id time gender
<dbl> <int> <dbl>
1 1 1 1
2 1 2 1
3 1 3 1
4 2 1 2
5 2 2 2
6 2 3 2
7 3 1 1
8 3 2 1
9 3 3 1