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

R语言实现按ID、Location、Customer分组拼接Issue列并去重

R语言实现分组去重拼接Issue列的方案

刚好碰到过类似的需求,给你分享两种实用的R实现方法,都能完美达成你的目标——按ID、Location、Customer分组,对Issue列去重后拼接成逗号分隔的字符串:

方法一:使用dplyr包(tidyverse生态,推荐)

dplyr是数据处理的常用工具,代码可读性高,操作简洁:

# 先安装并加载dplyr包(首次使用需安装)
# install.packages("dplyr")
library(dplyr)

# 构造你的示例数据框
df <- data.frame(
  ID = c(1, 2, 3, 1, 2, 2),
  Location = c("x", "y", "z", "x", "y", "y"),
  Customer = c("a", "b", "c", "a", "b", "b"),
  Issue = c("Issue1", "Issue2", "Issue3", "Issue4", "Issue5", "Issue6")
)

# 核心操作:分组 → 去重拼接Issue
result <- df %>%
  group_by(ID, Location, Customer) %>%  # 指定分组列
  summarize(
    Issues = paste(unique(Issue), collapse = ", "),  # 去重后拼接
    .groups = "drop"  # 取消分组状态,避免后续警告
  )

# 查看结果
print(result)

关键说明:

  • unique(Issue):自动过滤分组内重复的Issue值,确保每个Issue只保留一次
  • paste(..., collapse = ", "):把去重后的字符串用「逗号+空格」连接成一个字符串
  • .groups = "drop":分组完成后取消分组标记,让结果回归普通数据框

方法二:使用base R(无需额外安装包)

如果不想加载第三方包,用base R的aggregate函数也能实现:

# 构造示例数据框
df <- data.frame(
  ID = c(1, 2, 3, 1, 2, 2),
  Location = c("x", "y", "z", "x", "y", "y"),
  Customer = c("a", "b", "c", "a", "b", "b"),
  Issue = c("Issue1", "Issue2", "Issue3", "Issue4", "Issue5", "Issue6")
)

# 分组聚合操作
result_base <- aggregate(
  Issue ~ ID + Location + Customer, 
  data = df,
  FUN = function(x) paste(unique(x), collapse = ", ")
)

# 将结果列名改为需求的"Issues"
colnames(result_base)[4] <- "Issues"

# 查看结果
print(result_base)

两种方法运行后都会得到你期望的结果:

ID Location Customer               Issues
1  1        x        a        Issue1, Issue4
2  2        y        b Issue2, Issue5, Issue6
3  3        z        c                Issue3

内容的提问来源于stack exchange,提问作者Partha sarathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:35