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

如何按data.table的一列分组,从另一列生成嵌套向量?

问题与解决

问题背景

给定data.table数据集:

Col_1 <- c("A", "A", "A", "B", "B", "B")
Col_2 <- c("AA", NA, "AA", NA, "BB", "BBB")
dt <- data.table(Col_1, Col_2)

需求是按Col_1分组,新增列c3存储对应分组下Col_2所有元素组成的嵌套向量,期望输出:

Col_1    c3
<char> <list>
1:      A     c("AA", NA, "AA")
2:      B     c(NA, "BB", "BBB")

尝试代码后未得到预期结果:

dt[, .(c3= sapply(Col_2,c))
   , .(Col_1)]

错误输出(每行对应一个元素,未合并为嵌套向量):

Col_1     c3
   <char> <list>
1:      A     AA
2:      A     NA
3:      A     AA
4:      B     NA
5:      B     BB
6:      B    BBB

正确解法

在data.table中,直接通过list()将分组后的Col_2打包为列表列即可,无需使用sapply:

写法1:基础写法

dt[, .(c3 = list(Col_2)), by = Col_1]

写法2:data.table简写语法

dt[, .(c3 = .(Col_2)), by = Col_1]

执行后得到预期输出:

Col_1          c3
   <char>      <list>
1:      A AA,NA,AA
2:      B NA,BB,BBB

错误原因

之前使用sapply(Col_2, c)会将Col_2的每个元素单独转换为向量,相当于逐行拆分处理,导致每个元素生成一行记录。而直接用list(Col_2)会将整个分组的Col_2列作为单个向量存入列表列,满足嵌套向量的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:01