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

如何在按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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:50:21