R:唯一的列值,合并第二列的行

  • 本文关键字:二列 唯一 合并 r dplyr
  • 更新时间 :
  • 英文 :


从数据帧中,我需要一列的所有唯一值的列表。为了以后可能的检查,我们需要保留来自第二列的信息,但为了简单地合并。

Sample data
df <- data.frame(id=c(1,3,1),source =c("x","y","z"))
df
id    source
1  1         x
2  3         y
3  1         z

期望的结果是

df2
id      source
1  1         x,z
2  3         y

这应该很容易,但我仍然找不到适当的功能/语法?

。就像

df %>%
+     group_by(id) %>%
+     summarise(vlist = paste0(source, collapse = ",")) 

df %>%
+     distinct(id) %>%
+     summarise(vlist = paste0(source, collapse = ",")) 

我错过了什么?谢谢你的建议!

您可以使用aggregatefromstats来组合每组

aggregate(source ~ id, df, paste, collapse = ",")
#  id source
#1  1    x,z
#2  3      y

使用下面的代码是一个解决方案:

library(dplyr)
df <- data.frame(id=c(1,3,1),source =c("x","y","z"))
df %>%
group_by(id) %>%
summarise(vlist = paste0(source, collapse = ",")) %>% 
distinct(id, .keep_all = TRUE)
# A tibble: 2 x 2
id vlist
<dbl> <chr>
1     1 x,z  
2     3 y  

第二种方法不起作用,因为在聚合数据之前调用了distinct。此外,您需要使用.keep_all = TRUE来保留另一列。

你的第一个方法缺少distinct

aggregate(source ~ id, df, toString)

最新更新