【问题标题】:Fill next NA rows with the last observed data [duplicate]用最后观察到的数据填充下一个 NA 行[重复]
【发布时间】:2021-12-30 11:03:15
【问题描述】:

我有不同人的跟进数据,例如对于一个人,如果我有 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 观察之前,我没有找到任何可以替换的函数,并且数据按人员和日期排序。

【问题讨论】:

    标签: r dplyr na fill


    【解决方案1】:

    一个选项是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
    

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多