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

如何用data.table语法展开R中数据表列内的向量

使用data.table原生语法展开列表列为多行

我有一个data.table,其中列C存储着向量(如c('a', 'b', 'c')),希望将该列中的向量展开为多行:即列C的c('a', 'b', 'c')对应生成3行,其他列内容复制,列C分别为a、b、c。

示例代码:

library(data.table)

DT <- data.table(
  A = c(1, 2, 3),
  B = c("abc", "bbc", "ccc"),
  C = list(c("a", "b", "c"), c("d", "e"), c("f"))
)

当前DT输出:

A   B     C # 实际数据中有更多列
1: 1 abc a,b,c
2: 2 bbc   d,e
3: 3 ccc     f

期望输出:

A   B C
1: 1 abc a
2: 1 abc b
3: 1 abc c
4: 2 bbc d
5: 2 bbc e
6: 3 ccc f

原生data.table实现方案

不需要引入额外库,直接用data.table的分组+拆列表语法即可:

# 通用写法,适配任意数量的其他列
result <- DT[, .(C = unlist(C)), by = setdiff(names(DT), "C")]

如果明确知道其他列的名称,也可以直接指定分组列:

# 指定分组列的写法
result <- DT[, .(C = unlist(C)), by = .(A, B)]

运行上述代码后,result即为期望的输出:

A   B C
1: 1 abc a
2: 1 abc b
3: 1 abc c
4: 2 bbc d
5: 2 bbc e
6: 3 ccc f

原理说明

  • by = setdiff(names(DT), "C"):按除了C列之外的所有列分组,确保其他列的内容会被复制到拆分后的每一行
  • .(C = unlist(C)):将每组内的C列列表向量拆分为单个元素,生成对应的多行记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:52:12