R 通过删除 NA 值聚合字符串

Bat*_*lak 1 r dplyr

我有一个这样的 DF:

df_1 <- data_frame(
  id = c(1, 1, 2, 2, 3),
  Class1 = c("C1", NA, "C3", "C3", NA),
  Class2 = c(NA, "C2", NA, NA, "C4")
)
Run Code Online (Sandbox Code Playgroud)
> df_1
# A tibble: 5 x 3
     id Class1 Class2
  <dbl> <chr>  <chr> 
1     1 C1     NA    
2     1 NA     C2    
3     2 C3     NA    
4     2 C3     NA    
5     3 NA     C4 
Run Code Online (Sandbox Code Playgroud)

我需要一个最终输出:

> df_1
# A tibble: 5 x 3
     id Class1 Class2
  <dbl> <chr>  <chr> 
1     1 C1     C2    
2     2 C3     NA    
3     3 NA     C4 
Run Code Online (Sandbox Code Playgroud)

我正在尝试分组和总结:

df_1 %>% group_by(id) %>% summarise_at(vars(Class1, Class2), ~ unique(.))
Run Code Online (Sandbox Code Playgroud)
# A tibble: 4 x 3
# Groups:   id [3]
     id Class1 Class2
  <dbl> <chr>  <chr> 
1     1 C1     NA    
2     1 NA     C2    
3     2 C3     NA    
4     3 NA     C4  
Run Code Online (Sandbox Code Playgroud)

NA如果任一列具有nonNA值,我如何删除值?我找不到任何处理字符列的示例。

Bas*_*bo1 5

dplyr::coalesce 工作:

df_1 %>%
  group_by(id) %>%
  summarise_at(vars(Class1, Class2), function(x) coalesce(!!!x))
Run Code Online (Sandbox Code Playgroud)

# A tibble: 3 x 3
     id Class1 Class2
  <dbl> <chr>  <chr> 
1     1 C1     C2    
2     2 C3     NA    
3     3 NA     C4 
Run Code Online (Sandbox Code Playgroud)