如何用dcast()按分组堆叠/合并data.table的字符串列
解决data.table按分组合并字符串的问题
这问题我太熟啦,用data.table的分组聚合功能就能轻松实现你要的效果!
首先先确认你的原始数据生成代码(我帮你修正了小细节,rep(letters[1:6])其实不用额外加rep,直接letters[1:6]就可以,不过不影响最终数据结果):
library(data.table) DT <- data.table(id = rep(1:3, 2), class = letters[1:6], des = rep(LETTERS[1:2], 3))
接下来就是核心的转换代码,按id分组后,用paste()配合collapse参数把每个分组里的字符串拼接起来:
result <- DT[, .(class = paste(class, collapse = ", "), des = paste(des, collapse = ", ")), by = id]
运行后你就能得到完全符合需求的结构:
id class des 1: 1 a, d A, B 2: 2 b, e B, A 3: 3 c, f A, B
简单拆解下逻辑:
by = id:指定按id列进行分组,把相同id的行归为一组.():在data.table里用来定义要生成的新列,这里我们对每个分组的class和des列分别做拼接处理paste(class, collapse = ", "):把当前分组里的所有class字符串用,(逗号加空格)连接成一个字符串,collapse参数就是用来指定拼接的分隔符
如果之前尝试没成功,大概率是没把paste的collapse参数用对,或者分组的语法没写到位,这个方法是data.table处理这类字符串合并需求的标准姿势,效率还很高,处理大数据集也不在话下~
内容的提问来源于stack exchange,提问作者Caleb
相关产品推荐
相关产品推荐

