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

R data.table按gr和day分组将j列值汇总为向量列表的实现方法

data.table分组汇总为列表列解决方案

直接使用如下代码即可实现需求:

library(data.table)
dat = data.table(j = c(3,8,9,11,10,28, 5), gr = c(9,9,9,9,10,10, 10), day = c(1,1,2,2,1,1,2)) 
res_dat <- dat[, .(all_values = list(j)), by = .(gr, day)]

结果验证

打印结果默认会显示向量元素用逗号分隔,和预期展示格式一致:

> res_dat
   gr day all_values
1:  9   1        3,8
2:  9   2       9,11
3: 10   1      10,28
4: 10   2          5

可以通过以下代码验证列类型符合要求:

# 验证all_values是列表类型列
> class(res_dat$all_values)
[1] "list"
# 验证每个元素是存储j值的数值向量
> class(res_dat$all_values[[1]])
[1] "numeric"
> res_dat$all_values[[1]]
[1] 3 8

原写法问题说明

  • 写法dat[, j[1:.N], by = .(gr, day )]会将分组内的每个j值拆分为单独行返回,不会聚合为单个向量存储
  • 写法dat[, list(j[1:.N]), by = .(gr, day )]本质和上述写法逻辑一致,无法生成预期的列表列
  • 用到Reduce的写法属于冗余操作,不需要累加拼接,分组后的j本身就是当前组的所有取值向量,直接用list()包裹即可将整个向量作为列表的单个元素,生成目标列表列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:21:02