R语言获取单列唯一值并合并对应另一列行内容的实现方法
错误原因拆解
- 第一种写法逻辑本身正确,唯一问题是你将汇总后的列命名为
vlist,和你期望的source列名不符,调整列名即可得到目标结果。 - 第二种写法逻辑不成立:
distinct(id)默认仅保留id列,执行后数据框已经没有source字段,后续拼接操作无法找到对应列;即使添加.keep_all = TRUE参数保留所有列,也只会保留每个id对应的第一条source记录,无法实现同id下所有source值的合并。
正确实现代码
tidyverse 版本(基于你的第一种写法修正)
library(dplyr) df2 <- df %>% group_by(id) %>% summarise(source = paste0(source, collapse = ","))
运行后输出结果和你预期完全一致:
> df2 # A tibble: 2 × 2 id source <dbl> <chr> 1 1 x,z 2 3 y
基础R 版本
无需加载第三方包也可以实现:
df2 <- aggregate(source ~ id, df, function(x) paste0(x, collapse = ","))
扩展说明
如果同一个id下存在重复的source值,想要先去重再合并,可以调整代码为:
df %>% group_by(id) %>% summarise(source = paste0(unique(source), collapse = ","))
内容的提问来源于stack exchange,提问作者user2006697
相关产品推荐
相关产品推荐

