在R中出现特定字符后替换字符

时间:2018-04-08 21:10:52

标签: r

我有一个像这样的字符列表: -

a <- c("NM020506_1","NM_020519_1","NM00_1030297.2")

我正在尝试使用基础R获得这样的输出。

NM020506, NM, NM00

即忽略“_”之后的所有内容。

我试过这样的事情。但显然这是不正确的。

a
[1] "NM020506_1"     "NM_020519_1"    "NM00_1030297.2"
> substr(a,1,unlist(gregexpr(pattern ='_',a))-1)
[1] "NM020506"  "NM"        "NM00_1030"
> 

2 个答案:

答案 0 :(得分:4)

您可以使用sub功能,将_之后的所有内容替换为空。

a <- c("NM020506_1","NM_020519_1","NM00_1030297.2")
sub("_.*","",a)
[1] "NM020506" "NM"       "NM00"    

无需使用gregexpr,因为它很贪婪,但您只需要第一个-。您可以使用非贪婪的regexpr

substr(a,1,regexpr(pattern ='_',a)-1)
[1] "NM020506" "NM"       "NM00"    

答案 1 :(得分:0)

您可以将strsplit用作:

#data 
a <- c("NM020506_1","NM_020519_1","NM00_1030297.2")

sapply(strsplit(a,"_"),function(x)x[1])

#[1] "NM020506" "NM"       "NM00"