用最后观察到的数据填充接下来的 NA 行

Fill next NA rows with the last observed data

我有针对不同人的跟进数据,例如对于一个人,如果我有 10 次观察,他的名字只会出现在他的第一行,后面的 9 行不会有名字。

我的目标是填写 name

这是我的数据的可重现示例:

test = data.frame(name = c("Paul",NA,NA,"John",NA,"Ethan",NA,NA),
                  date = c("2016-05-06","2017-05-06","2018-05-06","2012-08-09","2016-02-01","2017-06-06","2017-07-06","2017-08-06"),
                  data = c(1,2,1,NA,2,2,NA,2))

这就是数据的样子:

  name       date data
1  Paul 2016-05-06    1
2  <NA> 2017-05-06    2
3  <NA> 2018-05-06    1
4  John 2012-08-09   NA
5  <NA> 2016-02-01    2
6 Ethan 2017-06-06    2
7  <NA> 2017-07-06   NA
8  <NA> 2017-08-06    2

我的目标是:

  name       date data
1  Paul 2016-05-06    1
2  Paul 2017-05-06    2
3  Paul 2018-05-06    1
4  John 2012-08-09   NA
5  John 2016-02-01    2
6 Ethan 2017-06-06    2
7 Ethan 2017-07-06   NA
8 Ethan 2017-08-06    2

我没有找到任何可以替换的功能,直到下一次不 NA 观察,并且为了提供信息,数据按人员和日期排序。

一个选项是 tidyr::fill:

test = data.frame(name = c("Paul",NA,NA,"John",NA,"Ethan",NA,NA),
                  date = c("2016-05-06","2017-05-06","2018-05-06","2012-08-09","2016-02-01","2017-06-06","2017-07-06","2017-08-06"),
                  data = c(1,2,1,NA,2,2,NA,2))

tidyr::fill(test, name)
#>    name       date data
#> 1  Paul 2016-05-06    1
#> 2  Paul 2017-05-06    2
#> 3  Paul 2018-05-06    1
#> 4  John 2012-08-09   NA
#> 5  John 2016-02-01    2
#> 6 Ethan 2017-06-06    2
#> 7 Ethan 2017-07-06   NA
#> 8 Ethan 2017-08-06    2