R语言表格过滤:将重复分组行合并为逗号分隔值
在R中按分组合并列值的解决方案
针对你需要将x1、x2列相同分组对应的x3列值合并为逗号分隔字符串的需求,我整理了几种实用的方法,都是R里处理这类分组合并需求的经典方案:
1. 使用dplyr(tidyverse生态)
这是日常数据分析中最常用的tidy风格处理方式,代码可读性拉满:
先加载依赖包并创建可复现的示例数据:
library(dplyr) library(stringr) # 你的输入数据 df <- data.frame( x1 = c("A", "A", "A", "C", "C"), x2 = c("B", "B", "B", "D", "D"), x3 = c("x", "y", "z", "u", "v"), stringsAsFactors = FALSE )
然后执行分组合并操作:
result_df <- df %>% group_by(x1, x2) %>% summarize(x3 = str_c(x3, collapse = ","), .groups = "drop") print(result_df)
group_by(x1, x2):按x1和x2的组合对数据分组str_c(x3, collapse = ","):把每组里的x3值用逗号拼接成单个字符串.groups = "drop":合并完成后取消分组状态,得到普通的数据框格式
运行后就能得到你想要的输出:
# A tibble: 2 × 3 x1 x2 x3 <chr> <chr> <chr> 1 A B x,y,z 2 C D u,v
2. 使用data.table(适合大数据集)
如果你的数据量很大,data.table的处理速度会比dplyr更高效:
library(data.table) dt <- as.data.table(df) result_dt <- dt[, .(x3 = paste(x3, collapse = ",")), by = .(x1, x2)] print(result_dt)
by = .(x1, x2):指定分组的列组合paste(x3, collapse = ","):用基础R的paste函数就能完成列值合并,效果和str_c一致
3. 基础R方法(无需额外安装包)
要是不想加载第三方包,用原生的aggregate函数也能实现需求:
result_base <- aggregate(x3 ~ x1 + x2, data = df, FUN = function(x) paste(x, collapse = ",")) print(result_base)
这里通过公式x3 ~ x1 + x2明确分组依据和需要合并的列,自定义FUN函数来完成字符串拼接。
内容的提问来源于stack exchange,提问作者ersan
相关产品推荐
相关产品推荐

