如何填补按单位和时间分组的面板数据中的缺失?

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