首页 > 解决方案 > 导入未按逻辑方式排序的数据

问题描述

我有以下形式的数据:

>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

等等

标签: rdataframeimport

解决方案


">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 将是完成此任务的更好工具。


推荐阅读