我想用dplyr
或tidyverse
的方式给其他丢失的数据赋相同的值。
例如,此数据框:
df <- data.frame(id = c(13, 14, 15, 16, 17),
name = c("Bob", "Alice", "Joe", "Bob", "Alice"),
year = c("2016", "2017", "2005", NA, NA))
> df
id name year
1 13 Bob 2016
2 14 Alice 2017
3 15 Joe 2005
4 16 Bob <NA>
5 17 Alice <NA>
我想在第4行中将值“ 2016”分配给“鲍勃”。
我可以使用which
函数来做到这一点:
df[which(df$name == "Bob"),]$year = "2016"
但是,如何使用dplyr
,purrr
或tidyverse
中的任何其他软件包来做到这一点?
答案 0 :(得分:1)
您可以从tidyr软件包中使用fill
:
library(dplyr)
library(tidyr)
df %>%
# within each name, fill missing years (default direction is downwards)
group_by(name) %>%
fill(year) %>%
ungroup() %>%
# sort rows by original order
arrange(id)
# A tibble: 5 x 3
id name year
<dbl> <fct> <fct>
1 13 Bob 2016
2 14 Alice 2017
3 15 Joe 2005
4 16 Bob 2016
5 17 Alice 2017