如何在R的data.table中拆分多字段并对应扩展行?
使用data.table拆分多值字段为对应行的解决方案
需求说明
处理data.table中以分号分隔的多值字段,将其拆分为独立行,同时保证不同字段拆分后的值一一对应匹配。
示例数据
library(data.table) df <- data.table(probe = c('A', 'B', 'C'), # 实际数据包含更多列 gene = c('geneA', 'geneB;geneC', 'geneD;geneH;geneI;geneO'), type = c('mRNA', 'mRNA;miRNA', 'mRNA;miRNA;mRNA;miRNA'))
原始数据输出:
probe gene type 1: A geneA mRNA 2: B geneB;geneC mRNA;miRNA 3: C geneD;geneH;geneI;geneO mRNA;miRNA;mRNA;miRNA
解决方案
使用data.table原生的tstrsplit和分组操作实现,代码如下:
df.new <- df[, .(gene = unlist(tstrsplit(gene, ";")), type = unlist(tstrsplit(type, ";"))), by = probe]
代码说明
by = probe:按probe字段分组,确保每个探针的拆分结果保持关联tstrsplit(col, ";"):将目标字段按分号拆分为列表,每个元素对应分组内的拆分后值向量unlist():将拆分后的列表转换为向量,配合分组逻辑自动扩展为多行,且不同字段的拆分结果严格一一对应
最终输出
probe gene type 1: A geneA mRNA 2: B geneB mRNA 3: B geneC miRNA 4: C geneD mRNA 5: C geneH miRNA 6: C geneI mRNA 7: C geneO miRNA
内容的提问来源于stack exchange,提问作者zhang
相关产品推荐
相关产品推荐

