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

R语言data.table中如何将重复行对应的多个id合并到单个单元格

实现方法

你可以直接利用data.table的分组聚合能力完成需求,无需先去重再关联id:

方法1:手动指定分组列(适配你的示例场景)

library(data.table)
dt <- data.table(id=1:3, Q1=c(1,2,1), Q2=c(3,1,3), Q3=c("a","b","a"), Q4=c("d","c","d"))

# 按Q1~Q4分组,同组id拼接为逗号分隔的字符串
res <- dt[, .(id = toString(id)), by = .(Q1, Q2, Q3, Q4)]
# 调整列顺序和原表一致
setcolorder(res, c("id", "Q1", "Q2", "Q3", "Q4"))

运行后得到的结果和你预期完全一致:

> res
    id Q1 Q2 Q3 Q4
1: 1,3  1  3  a  d
2:   2  2  1  b  c

方法2:自动匹配分组列(适合Q列数量多的场景)

如果前缀为Q的属性列数量很多,不想手动逐个写,可以通过列名匹配自动生成分组字段:

# 匹配所有以Q开头的列作为分组依据
group_cols <- grep("^Q", names(dt), value = TRUE)
res <- dt[, .(id = toString(id)), by = group_cols]
# 调整列顺序
setcolorder(res, c("id", group_cols))

自定义分隔符说明

如果你不想用逗号加空格的默认分隔格式,可以把toString(id)替换为自定义的paste写法,比如用纯逗号分隔:

res <- dt[, .(id = paste(id, collapse = ",")), by = .(Q1, Q2, Q3, Q4)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:45:02