2012-05-16 99 views
32

我与NCBI参考序列登录号工作就像变a删除“。”后的部分字符串。

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2") 

要从biomart包我需要的登录号后删除.1.2等获取信息。我通常这样做这个代码:

b <- sub("..*", "", a) 

# [1] "" "" "" "" "" "" 

但正如你所看到的,这是不是这个变量的正确方法。谁能帮我这个?

回答

44

你只需要逃避期:

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2") 

gsub("\\..*","",a) 
[1] "NM_020506" "NM_020519" "NM_001030297" "NM_010281" "NM_011419" "NM_053155" 
+0

澄清:基础包(即没有其他软件包,比如'string r'),选项如下: b1 < - gsub(“\\ .. *”,“”,a,fixed = FALSE) b2 < - sub(“\\ .. *“,”“,a,fixed = FALSE) 在某些情况下,您可能需要更改'fixed'参数。但是,在这里你必须把它设置为'FALSE'(这是默认值);否则它将无法工作。此外,你需要双重转义'\\',否则你会得到一个错误。 –

+0

因为我们在这里使用正则表达式,所以您不会将它与fixed一起使用。 – Hansi

3

你可以这样做:

sub("*\\.[0-9]", "", a) 

library(stringr) 
str_sub(a, start=1, end=-3) 
+0

替代选择:'str_replace(a,“\\。[0-9]”,“”)'和'str_replace(a,“\\ .. *”,“”)' – Paolo

3

我们可以假装他们是文件名,并删除扩展

tools::file_path_sans_ext(a) 
# [1] "NM_020506" "NM_020519" "NM_001030297" "NM_010281" "NM_011419" "NM_053155"