【问题标题】:Fast data.table column split to multiple rows based on delimiter [duplicate]基于分隔符的快速data.table列拆分为多行[重复]
【发布时间】:2018-08-01 14:55:16
【问题描述】:

我有一个包含 3 列的 data.table,我想用分隔符将第三列拆分为多行。

我目前的实现是:

protein.ids <- c("PA0001","PA0001", "PA0002", "PA0002", "PA0002")
protein.names <- c("protein A", "protein A", "protein B", "protein B", "protein B")
peptides.ids <- c("1;3;2", "81;23;72", "7;6;8", "10;35;21", "5;2;7")

data <- data.frame(matrix(c(protein.ids, protein.names, peptides.ids), 
                          nrow = 5), 
                  stringsAsFactors = FALSE)

colnames(data) <- c("Protein IDs", "Protein Names", "Peptide IDs")

data <- data.table(data)

data[ ,list(`Peptide IDs` = unlist(strsplit(`Peptide IDs`, ";"))),
       by = list(`Protein IDs`, `Protein Names`)]

但是我的 data.table 相当大(~1.2G),到现在它需要大约 3 秒才能运行,所以有没有更快的方法来达到相同的结果,或者没有任何值得挤压的果汁?

【问题讨论】:

标签: r optimization data.table strsplit


【解决方案1】:

我们可以在第三列上使用tstrsplit 拆分为多个列并将输出分配(:=)到感兴趣的列名

data[, paste0("V", 1:3) := tstrsplit(`Peptide IDs`, ";", type.convert = TRUE)] 

如果我们需要“长”格式

library(splitstackshape)
cSplit(data, "Peptide IDs", ";", "long")

【讨论】:

  • cSplit 在分析过程中几乎以稍微快一点的速度完成了这项工作,但在基准测试过程中超过了 data.table 实现。谢谢!
猜你喜欢
  • 2016-04-15
  • 2011-07-27
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多