使用dplyr或purr将值分配给某些特定变量

时间:2019-03-18 01:48:42

标签: r dplyr

我想用dplyrtidyverse的方式给其他丢失的数据赋相同的值。

例如,此数据框:

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"

但是,如何使用dplyrpurrrtidyverse中的任何其他软件包来做到这一点?

1 个答案:

答案 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