R提取部分字符串

Lis*_*ann 19 regex string r extract bioinformatics

我有一个关于提取字符串的一部分的问题.例如,我有一个这样的字符串:

a <- "DP=26;AN=2;DB=1;AC=1;MQ=56;MZ=0;ST=5:10,7:2;CQ=SYNONYMOUS_CODING;GN=NOC2L;PA=1^1:0.720&2^1:0"
Run Code Online (Sandbox Code Playgroud)

我需要在GN=和之间提取所有内容;.所以它会在这里NOC2L.

那可能吗?

注意:这是INFO列形式的VCF文件格式.GN是基因名称,因此我们想从INFO列中提取基因名称.

koh*_*ske 33

试试这个:

sub(".*?GN=(.*?);.*", "\\1", a)
# [1] "NOC2L"
Run Code Online (Sandbox Code Playgroud)


jba*_*ums 14

假设分号将元素分开,并且等号仅在键/值对之间出现,则非严格正则表达式方法将为:

bits <- unlist(strsplit(a, ';'))
do.call(rbind, strsplit(bits, '='))

      [,1] [,2]               
 [1,] "DP" "26"               
 [2,] "AN" "2"                
 [3,] "DB" "1"                
 [4,] "AC" "1"                
 [5,] "MQ" "56"               
 [6,] "MZ" "0"                
 [7,] "ST" "5:10,7:2"         
 [8,] "CQ" "SYNONYMOUS_CODING"
 [9,] "GN" "NOC2L"            
[10,] "PA" "1^1:0.720&2^1:0"  
Run Code Online (Sandbox Code Playgroud)

那么只需选择合适的元素即可.