Как извлечь текст из строки с помощью регулярного выражения в R? - PullRequest
1 голос
/ 15 апреля 2019

У меня есть вектор строк, например:

x <- c("gene_biotype \"protein_coding\"; transcript_name \"IGHV3-66-201\"; 
transcript_source \"havana\"; transcript_biotype \"IG_V_gene\"; 
protein_id \"ENSP00000375041\"; protein_version \"2\"; tag 
\"cds_end_NF\"; tag \"mRNA_end_NF\"; tag \"basic\"; 
transcript_support_level \"NA\";",
"gene_id \"ENSG00000211973\"; gene_version \"2\"; transcript_id 
\"ENST00000390633\"; transcript_version \"2\"; exon_number \"1\"; 
gene_name \"IGHV1-69\"; gene_source \"ensembl_havana\"; gene_biotype 
\"IG_V_gene\"; transcript_name \"IGHV1-69-201\"; transcript_source 
\"ensembl_havana\"; transcript_biotype \"IG_V_gene\"; protein_id 
\"ENSP00000375042\"; protein_version \"2\"; tag \"cds_end_NF\"; tag 
\"mRNA_end_NF\"; tag \"basic\"; transcript_support_level \"NA\";",
"gene_id \"ENSG00000211973\"; gene_version \"2\"; transcript_id 
\"ENST00000390633\"; transcript_version \"2\"; exon_number \"2\"; 
gene_name \"IGHV1-69\"; gene_source \"ensembl_havana\"; gene_biotype 
\"protein_coding\";")

Мне нужно извлечь цитируемый текст (любые символы), который следует за gene_biotype. Например:

[1] protein_coding\ 
[2] IG_V_gene\
[3] protein_coding\

Я попытался использовать str_extract в пакете stringr, но не могу заставить работать регулярное выражение.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

5 голосов
/ 15 апреля 2019

Вы можете использовать регулярное выражение с некоторой помощью из пакета stringr, чтобы получить необходимые данные. Например

library(stringr)
str_match(x, "gene_biotype\\s+\"([^\"]+)\"")
#      [,1]                                [,2]            
# [1,] "gene_biotype \"protein_coding\""   "protein_coding"
# [2,] "gene_biotype \n\"IG_V_gene\""      "IG_V_gene"     
# [3,] "gene_biotype \n\"protein_coding\"" "protein_coding"

Возвращает матрицу с соответствием и категорией. Если вы просто хотите категорию, вы можете сделать

str_match(x, "gene_biotype\\s+\"([^\"]+)\"")[,2]
# [1] "protein_coding" "IG_V_gene"      "protein_coding"
0 голосов
/ 15 апреля 2019

Я нашел это здесь

stringi::stri_extract_all_regex(x, '(?<=").*?(?=")')[[1]][1]
#[1] "protein_coding"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...