如何在R中捕获匹配字符串的某个部分

时间:2014-07-08 17:21:21

标签: r match

我使用seqinr包读取某个带有一些基因的fasta文件。现在每个基因都有一些属性给我一个这样的一行:

> getAnnot(g[1])

">Translation:ENSANGP00000020176 Database:core Gene:ENSANGG00000017687 Clone:AAAB01008888 Contig:AAAB01008888_84 Chr:2R Basepair:42989807 Status:known"

我希望结果为Gene:ENSANGG00000017687

由于 这是我的代码

##rm(list=ls())
library(seqinr)
g<-seqinr::read.fasta('frthomas.fasta')
g2<-getAnnot(g[1:500])

2 个答案:

答案 0 :(得分:1)

您也可以在此处使用regexec。例如,如果您的字符串存储在a

sapply(regmatches(a, regexec("Gene:(\\w+)\\b",a)), `[`, 2)
[1] "ENSANGG00000017687"

这里我们采用列表中的第二个元素来获取基因值。如果您还想要“Gene:”部分,请将2更改为1。

答案 1 :(得分:0)

在我们使用strsplit

分隔每个空格的字符串后,您想要的结果位于第三个元素中
> string <-  
    ">Translation:ENSANGP00000020176 Database:core Gene:ENSANGG00000017687 Clone:AAAB01008888 Contig:AAAB01008888_84 Chr:2R Basepair:42989807 Status:known"
> unlist(strsplit(string, " "))[3]
# [1] "Gene:ENSANGG00000017687"