如果值不同,则将列值折叠为一

use*_*770 3 r dplyr

我有一个 df ,如下所示:

ID   LOC
1     A
1     A
2     A
2     B
3     A
3     A
3     A
4     A
4     B
4     C
Run Code Online (Sandbox Code Playgroud)

我想做的是将 LOC 值折叠为每个 ID 一行,如果它们相同,则将其保留为一个值,所以我的输出将是:

ID   LOC
1     A
2     A + B
3     A
4     A + B + C
Run Code Online (Sandbox Code Playgroud)

现在我正在使用:

group_by(ID) %>%
mutate(concat_LOC = paste0(LOC, collapse = " + ")) 
Run Code Online (Sandbox Code Playgroud)

它连接所有值,即使它们相同

r2e*_*ans 5

  1. 您正在减少/总结,因此您应该使用summarize而不是mutate.
  2. 由于您确实想要重复LOC值,因此请使用unique.
dat %>%
  group_by(ID) %>%
  summarize(LOC = paste(unique(LOC), collapse = " + ")) %>%
  ungroup()
# # A tibble: 4 x 2
#      ID LOC      
#   <int> <chr>    
# 1     1 A        
# 2     2 A + B    
# 3     3 A        
# 4     4 A + B + C
Run Code Online (Sandbox Code Playgroud)