r - 基于分隔符将快速 data.table 列拆分为多行

标签 r optimization data.table strsplit

<分区>

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

我目前的实现是:

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 秒,那么是否有更快的方法来获得相同的结果或者没有任何值得榨取的汁液?

最佳答案

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

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

如果我们需要“长”格式

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

关于r - 基于分隔符将快速 data.table 列拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636463/

相关文章:

c++ - 在 bool 数组上使用二进制表达式的最快方法

r - 如何从一个 data.table 中删除另一个 data.table 中指定的组组合 [R]

在 lapply(.SD,...) 中为 data.table R 保留列名

r - 跨共享公共(public)列分配 groupid

R 数据表 : (dynamic) forward looking Cross-Joins

rename_if() 和 starts_with() 为某些列添加前缀

python - 根据 python 中的给定条件最小化 n 的最快方法

css - 如何修复 Avoid AlphaImageLoader 过滤器?

r - 在 r 中循环一个 rep() 函数

java - 如何开始创建基于/使用 JGR 的 R 应用程序?