【问题标题】:Remove part of string after "."删除“。”之后的部分字符串
【发布时间】:2012-05-16 11:37:00
【问题描述】:

我正在使用 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] "" "" "" "" "" ""

但正如您所见,这不是该变量的正确方法。谁能帮我解决这个问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    你只需要转义句号:

    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" 
    

    【讨论】:

    • 澄清:使用基本包中的函数(即没有其他包,如string r),选项如发布:b1 fixed 参数。但是,您必须将其设置为FALSE(这是默认设置);否则它将无法正常工作。此外,您需要双转义 `\`,否则会出错。
    • 你不会使用fixed作为TRUE,因为我们在这里使用正则表达式。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你可以这样做:

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

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

      【讨论】:

      • 替代方案:str_replace(a,"\\.[0-9]","")str_replace(a,"\\..*","")
      • str_sub(a, start = 1, end = -3) 解决方案假定只有两个字符要删除(“.”和其后的单个数字)。对于许多基因 ID 系统,版本中可能有多个数字(尤其是探针 ID)。在这种情况下,更灵活的解决方案是str_remove(a, pattern = "\\..*")。在上面的代码中,模式是找到第一个句点(使用"\\."),然后是any字符("."any次(@ 987654329@).
      【解决方案4】:

      如果字符串应该是固定长度的,那么可以使用来自base Rsubstr。但是,我们可以使用regexpr 获取. 的位置,并在substr 中使用它

      substr(a, 1, regexpr("\\.", a)-1)
      #[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"   
      

      【讨论】:

        猜你喜欢
        • 2020-11-23
        • 1970-01-01
        • 2020-06-17
        • 2017-02-26
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        相关资源
        最近更新 更多