提问人:netmarson 提问时间:10/26/2023 最后编辑:r2evansnetmarson 更新时间:10/26/2023 访问量:40
改变条件后提取子字符串
Extract substring after varying condition
问:
这是我在这个网站上的第一篇帖子。我目前正在努力根据不同的条件从多个字符串中提取一个子字符串。我正在处理的字符串来自 FASTA 文件,如下所示:
strings <- c("gi|0|gb|MK004980| Bat astrovirus isolate DXRA19 RNA-dependent RNA polymerase gene, partial cds. [DXRA19 (BVI10455)]",
"gi|225381010|gb|FJ571114| Bat astrovirus Tm/Guangxi/LD61/2007 RNA-dependent RNA polymerase (pol) gene, partial cds. [Tm/Guangxi/LD61/2007 (BVI03388)]")
我现在的目标是删除字符串的第一部分(带有“X|Y|Z|A|“)并仅提取特定序列的名称,因此它应该如下所示:
strings_final <- c("Bat astrovirus isolate DXRA19 RNA-dependent RNA polymerase gene, partial cds. [DXRA19 (BVI10455)]",
"Bat astrovirus Tm/Guangxi/LD61/2007 RNA-dependent RNA polymerase (pol) gene, partial cds. [Tm/Guangxi/LD61/2007 (BVI03388)]")
正如你所看到的,要删除的第一个部分在腿上有所不同,唯一一致的部分是四个“|”以及“gi”和“gb”。我知道我可以使用此模式将其删除并仅提取其之后的部分。但是,我目前正在努力在 R 中对此进行编码,因为我不知道使用哪个表达式来适应这种模式,例如 stringr::str_extract() 函数。
我将非常感谢您的帮助。
我尝试使用 stringr::str_extract() 函数,但我不知道我应该放入哪种模式来解决这个问题。
答:
0赞
r2evans
10/26/2023
#1
sub(".*\\| *", "", strings)
# [1] "Bat astrovirus isolate DXRA19 RNA-dependent RNA polymerase gene, partial cds. [DXRA19 (BVI10455)]"
# [2] "Bat astrovirus Tm/Guangxi/LD61/2007 RNA-dependent RNA polymerase (pol) gene, partial cds. [Tm/Guangxi/LD61/2007 (BVI03388)]"
正则表达式:
.*
任何东西(或什么都没有)\\|
文字管道符号,需要转义它,否则它是正则表达式运算符*
零个或多个空格
这有效地删除了找到的最后一个管道符号以及紧随其后的任何空格(如果有)。 不同的是,只进行一次这样的替换并退出,在这种情况下,这就是我们所需要的。sub
gsub
sub
替代方案(虽然不是我的首选):也可以假设所有字符串都具有相同数量的 -symbols:read.table
|
trimws(read.table(text = strings, sep = "|")[,5])
# [1] "Bat astrovirus isolate DXRA19 RNA-dependent RNA polymerase gene, partial cds. [DXRA19 (BVI10455)]"
# [2] "Bat astrovirus Tm/Guangxi/LD61/2007 RNA-dependent RNA polymerase (pol) gene, partial cds. [Tm/Guangxi/LD61/2007 (BVI03388)]"
我们需要删除 和 之间的空格。trimws
|
Bat
评论