【问题标题】:Parse text files with R用 R 解析文本文件
【发布时间】:2023-02-18 15:30:44
【问题描述】:

我正在尝试用这样的行解析文本文件:

QUERY   Query_3 Peptide 528 AT1G01110.2
DOMAINS
1   Query_3 Specific    404128  374 470 8.74687e-20 84.2155 pfam13178   DUF4005 C   45
1   Query_3 Non-specific    412094  93  173 0.000607039 42.1551 cd22307 Adgb_C_mid-like NC  45
ENDDOMAINS
SITES
ENDSITES
MOTIFS
1   Query_3 globin helix H  G93 101P    412094
1   Query_3 IQ motif    V125    143L    412094
1   Query_3 globin helix A  Q161    173V    412094
ENDMOTIFS
ENDQUERY
QUERY   Query_4 Peptide 196 AT1G01160.1
DOMAINS
1   Query_4 Specific    428268  22  73  8.8084e-19  76.1579 pfam05030   SSXT    -   45
ENDDOMAINS
ENDQUERY
QUERY   Query_5 Peptide 308 AT1G01180.1
DOMAINS
1   Query_5 Specific    433324  139 268 3.13921e-13 64.6367 pfam13578   Methyltransf_24 -   450167
ENDDOMAINS
ENDQUERY

它本质上是由描述分隔的制表符分隔行(例如 QUERY、DOMAINS、ENDDOMAINS ...)。我想制作两个数据框询问域名喜欢:

#data frame 1 ("QUERY" rows):
QUERY   Query_3 Peptide 528 AT1G01110.2
QUERY   Query_4 Peptide 196 AT1G01160.1
QUERY   Query_5 Peptide 308 AT1G01180.1

#data frame 2 (rows after "DOMAINS"):
1   Query_3 Specific    404128  374 470 8.74687e-20 84.2155 pfam13178   DUF4005 C   45
1   Query_3 Non-specific    412094  93  173 0.000607039 42.1551 cd22307 Adgb_C_mid-like NC  45
1   Query_4 Specific    428268  22  73  8.8084e-19  76.1579 pfam05030   SSXT    -   45
1   Query_5 Specific    433324  139 268 3.13921e-13 64.6367 pfam13578   Methyltransf_24 -   450167

有没有办法在 R 中做到这一点?谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    试试这些:

    txt <- readLines("text.txt")
    
    grep("^QUERY", txt, value = TRUE) |>
      paste(collapse = "
    ") |>
      read.table(text = _, header = FALSE)
    #      V1      V2      V3  V4          V5
    # 1 QUERY Query_3 Peptide 528 AT1G01110.2
    # 2 QUERY Query_4 Peptide 196 AT1G01160.1
    # 3 QUERY Query_5 Peptide 308 AT1G01180.1
    
    split(txt, cumsum(txt == "DOMAINS")) |>
      lapply(function(z) if (z[1] == "DOMAINS" && !is.na(end <- which(z[-1] == "ENDDOMAINS"))) z[2:end]) |>
      unlist() |>
      paste(collapse = "
    ") |>
      read.table(text = _, header = FALSE)
    #   V1      V2           V3     V4  V5  V6          V7      V8        V9             V10 V11    V12
    # 1  1 Query_3     Specific 404128 374 470 8.74687e-20 84.2155 pfam13178         DUF4005   C     45
    # 2  1 Query_3 Non-specific 412094  93 173 6.07039e-04 42.1551   cd22307 Adgb_C_mid-like  NC     45
    # 3  1 Query_4     Specific 428268  22  73 8.80840e-19 76.1579 pfam05030            SSXT   -     45
    # 4  1 Query_5     Specific 433324 139 268 3.13921e-13 64.6367 pfam13578 Methyltransf_24   - 450167
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2012-02-25
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多