如何用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
相关产品推荐
相关产品推荐

