用最后观察到的数据填充接下来的 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
我有针对不同人的跟进数据,例如对于一个人,如果我有 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