r - 快速 data.table 列根据分隔符拆分为多行
问题描述
我有一个包含 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")
推荐阅读
- python - tensorflow:对象没有属性'matrix_inverse',如何验证它应该被支持?
- r - 使用 tidyverse 将字符串列拆分为多个
- android - 如何在导航视图的边缘打印一个字符?
- python - 通过将一系列日期时间传递给现有数据框来创建新数据框
- amazon-web-services - 使用 Serverless 和 Node js 从 S3 存储桶获取文件
- node.js - 使用 Express 从 google API 获取 geoCoding
- mysql - 我无法用 mysql 中的触发器更新我的表
- css -
标签背景固定图像重叠在标题上 - python - 如何编写脚本 bash 在 jupyter-notebook 中输入多行输入?
- angular - 使用 ionic angular 6 在 Firebase 中管理用户