我有一个像这样的字符列表: -
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"
>
答案 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"