You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:02:41