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
相关产品推荐
相关产品推荐

