快速 data.table 列根据分隔符拆分为多行
Fast data.table column split to multiple rows based on delimiter
我有一个包含 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)]
如果我们需要'long'格式
library(splitstackshape)
cSplit(data, "Peptide IDs", ";", "long")
我有一个包含 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)]
如果我们需要'long'格式
library(splitstackshape)
cSplit(data, "Peptide IDs", ";", "long")