r - 导入未按逻辑方式排序的数据
问题描述
我有以下形式的数据:
>sp|A6NMZ2|SNTAN_HUMAN Sentan OS=Homo sapiens OX=9606 GN=SNTN PE=2 SV=1
39 S AGC/PKA RKMPKRISISKQLAS 25.507 22.884
>sp|O00501|CLD5_HUMAN Claudin-5 OS=Homo sapiens OX=9606 GN=CLDN5 PE=2 SV=1
201 S AGC/PKA LSFPVKYSAPRRPTA 23.138 22.884
207 T AGC/PKA YSAPRRPTATGDYDK 25.897 22.884
>sp|O14618|CCS_HUMAN Copper chaperone for superoxide dismutase OS=Homo sapiens OX=9606 GN=CCS PE=1 SV=1
267 S AGC/PKA AGKGRKESAQPPAHL 25.541 22.884
>sp|O14828|SCAM3_HUMAN Secretory carrier-associated membrane protein 3 OS=Homo sapiens OX=9606 GN=SCAMP3 PE=1 SV=3
32 S AGC/PKA AVIQHRPSRQYATLD 24.52 22.884
76 S AGC/PKA LQPSRKLSPTEPKNY 27.39 22.884
我如何在 R 中将其导入到这样的数据框中:
A6NMZ2 25.507
O00501 23.138
O00501 25.897
等等
解决方案
">sp"
数据中有一个模式,名称(Column1)位于以分隔的第二列的行中"|"
,数字(Column2)位于第 5 列的行之后">sp"
的行中,这样的事情应该有效:
x <- readLines("myFile.txt")
do.call(rbind,
lapply(split(x, cumsum(grepl(">sp", x, fixed = TRUE))), function(i){
cbind.data.frame(Col1 = unlist(strsplit(i[ 1 ], "|", fixed = TRUE))[ 2 ],
Col2 = read.table(text = i[ 2:length(i) ])[, 5])
}))
# Col1 Col2
# 1 A6NMZ2 25.507
# 2.1 O00501 23.138
# 2.2 O00501 25.897
# 3 O14618 25.541
# 4.1 O14828 24.520
# 4.2 O14828 27.390
注意: Bash/regex 将是完成此任务的更好工具。