基于ColB合并重复行,合并ColC与ColD并对ColD去重
按ColB合并行并去重合并ColC/ColD的解决方案
针对你提供的数据集,这里给出两种R语言的实现方案,均可满足按ColB分组合并行,同时合并ColC(直接拼接)和ColD(去重后拼接)的需求:
方法一:使用dplyr + tidyr包
这是tidyverse生态下的常用方案,代码可读性强:
首先加载所需工具包:
library(dplyr) library(tidyr)
执行数据处理逻辑:
result_df <- df %>% group_by(ColB) %>% summarise( ID = first(ID), # 保留每组第一个ID值 ColC = str_c(ColC, collapse = ","), # 直接拼接该组所有ColC值 ColD = str_c(unique(unlist(str_split(ColD, ","))), collapse = ",") # 拆分ColD元素、去重后再拼接 ) %>% ungroup() # 取消分组状态
方法二:使用data.table包
如果处理大规模数据集,data.table的运行效率更高:
先加载包并转换数据格式:
library(data.table) setDT(df)
执行数据处理:
result_df <- df[, .( ID = first(ID), ColC = paste(ColC, collapse = ","), ColD = paste(unique(unlist(strsplit(ColD, ","))), collapse = ",") ), by = ColB]
结果验证
运行上述任意一段代码后,输出的result_df会与你预期的结果完全一致:
ColB ID ColC ColD 1: A 1 S1,S2 X,Y,Z,A,B,C 2: B 3 S3,S4 A,B,C,X 3: C 5 S6,S8 X
关键逻辑说明
- 分组:通过
group_by(ColB)(dplyr)或by = ColB(data.table)指定按ColB分组 - ColC处理:利用
str_c/paste的collapse参数直接拼接组内所有值 - ColD处理:先拆分每行的逗号分隔元素,转为一维向量后去重,最后再拼接成字符串
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

