如何在R下划线后替换字符串

时间:2018-08-31 18:03:19

标签: r

假设我有一个字符串1:132464_A/T,在R中,如何在下划线_之后的部分字符串替换为另一个字符串?在这种情况下,将A/T替换为ABC。输出为1:132464_ABC

2 个答案:

答案 0 :(得分:2)

使用sub,匹配_,后跟字符(.*),将其替换为_,并使用字符串替换'BC'

sub("_A.*", "_ABC", str1)
#[1] "1:132464_ABC"

或者如果我们的'A'也发生变化,则捕获为一个组((_.)-下划线,后跟任意字符.),再捕获其他字符(.*),然后替换捕获组的后向引用(\\1)以及替换字符串

sub("(_.).*", "\\1BC", str1)
#[1] "1:132464_ABC"

或者使用正则表达式环顾四周来捕获_之后的字符并替换为捕获组的反向引用

sub("(?<=_)(.).*", "\\1BC", str1, perl = TRUE)
#[1] "1:132464_ABC"

或使用str_replace

library(stringr)
str_replace(str1, "_A.*", "_ABC")
#[1] "1:132464_ABC"

或使用stri_replace中的stringi

library(stringi)
stri_replace(str1, regex = "_A.*", "_ABC")
#[1] "1:132464_ABC"

或在提取第一个元素之后先在_处拆分字符串,然后在paste处拆分

paste0(strsplit(str1, "_")[[1]][1], "_ABC")
#[1] "1:132464_ABC"

数据

str1 <- "1:132464_A/T"

答案 1 :(得分:2)

subgsub替代:(将XXXX_A / T中的所有内容替换为XXXX_ABC)

str <- "1:132464_A/T"
sub('\\_.*', '_ABC', str)

OR

gsub("\\_.*","_ABC",str)

输出:

[1] "1:132464_ABC"