如何在按ID聚合时合并data.table列表变量中的字符向量 - R
解决方案
针对你用data.table按ID聚合列表列的需求,正确的语法如下:
基础合并(保留重复)
直接在分组后将每个ID对应的所有向量合并为一个,并包装成列表元素:
appended <- DT[, .(var = list(unlist(var))), by = ID]
或者用do.call(c, var)实现相同效果:
appended <- DT[, .(var = list(do.call(c, var))), by = ID]
合并同时去重(可选)
如果想一步完成合并+去重,只需在合并后加unique():
appended <- DT[, .(var = list(unique(unlist(var)))), by = ID]
为什么之前的代码出错?
你之前写的DT[, .(var=append(var), ID=ID[1]), by="ID"]问题在于:
append(var)会直接返回一个扁平的字符向量,而不是列表元素,导致最终var列是长向量而非你需要的列表列- 不需要手动指定
ID=ID[1],data.table的by=ID会自动保留每个分组的ID值
验证结果结构:
执行上述代码后,用str(appended)查看,会得到你想要的10行数据——ID为唯一字符,var为包含合并后向量的列表列。
内容的提问来源于stack exchange,提问作者Aaarrrgh's My Game
相关产品推荐
相关产品推荐

