首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将gff文件格式更改为zff格式

将gff文件格式更改为zff格式
EN

Stack Overflow用户
提问于 2014-08-15 07:14:11
回答 1查看 220关注 0票数 0

我有一个gff文件,如下所示,每一列按选项卡分开。

头(a,5)

代码语言:javascript
复制
      V1        V2   V3   V4   V5 V6 V7 V8
     gi|447604937|gb|AJJZ010637342.1| assembler gene 1059 1513  .  -  .
     gi|447604937|gb|AJJZ010637342.1| assembler mRNA 1059 1513  .  -  .
     gi|447604937|gb|AJJZ010637342.1| assembler exon 1059 1513  .  -  .
     gi|447604937|gb|AJJZ010637342.1| assembler mRNA 1059 1513  .  -  .
     gi|448181314|gb|AJJZ010120701.1| assembler gene 4700 8169  .  +  .
                                                                          V9
                                ID=PASA_cluster_9835;Name=PASA_cluster_9835
                     ID=align_id:87873|asmbl_10255;Parent=PASA_cluster_9835
     ID=exon:align_id:87873|asmbl_10255:1;Parent=align_id:87873|asmbl_10255
     ID=mRNA:align_id:87873|asmbl_10255:1;Parent=align_id:87873|asmbl_10255
                              ID=PASA_cluster_24371;Name=PASA_cluster_24371

我想将格式更改为

gi 447604937 Exon 5700 5043 Exon 5520 5691 Exon 6372 6578 Exon 7139 7398 Exon 8010 8169 >gi 44805666 Exon 7139 7398 Exon 8010222983.1 Exon 36 948

我对改变文件格式非常陌生,所以我应该如何解决这个问题。我不确定整形包能不能解决这个程序。如果可以的话,请给我举个例子。

谢谢你的建议

EN

回答 1

Stack Overflow用户

发布于 2014-08-15 07:45:12

我对formats并不熟悉。如果有dput数据会更好。检查这是否有帮助:

代码语言:javascript
复制
 lines1 <- readLines(n=7)
 gi|447604937|gb|AJJZ010637342.1| assembler gene 1059 1513  .  -  .
 gi|447604937|gb|AJJZ010637342.1| assembler mRNA 1059 1513  .  -  .
 gi|447604937|gb|AJJZ010637342.1| assembler exon 1059 1513  .  -  .
 gi|447604937|gb|AJJZ010637342.1| assembler mRNA 1059 1513  .  -  .
 gi|448181314|gb|AJJZ010120701.1| assembler gene 4700 8169  .  +  .
 gi|448181314|gb|AJJZ010120701.1| assemble exon 4700 8169  .  -  . 
 gi|448181314|gb|AJJZ010120701.1| assemble exon 5520 5691  .  -  . 

 lines2 <- grep("exon", lines1,value=T)
 library(stringr)
 v1 <- paste0(">",str_trim(str_extract(lines2, perl('.* (?=assembl)'))))
 v2 <- paste("Exon", str_extract(lines2, perl('(?<=exon )\\d+\\s+\\d+')))
 lapply(split(v2,v1), function(x) read.table(text=x, sep="",stringsAsFactors=F))
 #$`>gi|447604937|gb|AJJZ010637342.1|`
 #   V1   V2   V3
 #1 Exon 1059 1513

 #$`>gi|448181314|gb|AJJZ010120701.1|`
 #   V1   V2   V3
#1 Exon 4700 8169
#2 Exon 5520 5691

或者,如果你像这样需要它

代码语言:javascript
复制
 lst1 <- split(v2,v1)
 lines2 <- unlist(Map(`c`, names(lst1), lst1), use.names=F)
 cat(paste(lines2, collapse="\n"), "\n")
 # >gi|447604937|gb|AJJZ010637342.1|
 #Exon 1059 1513
 #>gi|448181314|gb|AJJZ010120701.1|
 #Exon 4700 8169
 #Exon 5520 5691 

您可以使用lines2write.table写入文件

解释

  • 在查找字符串.*之前提取所有内容,包括空格(?=assembl)

  • 对于第二种情况,我们寻找一个查找模式(?<=exon ),然后提取数字\\d+,然后是空格\\s+,再提取数字\\d+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25322568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档