【问题标题】:Extract character string in middle of string with R用R提取字符串中间的字符串
【发布时间】:2020-10-22 07:35:23
【问题描述】:

我的字符串看起来像这样:

a <- c("miRNA__hsa-mir-521-3p.iso.t5:", "miRNA__hsa-mir-947b.ref.t5:")

我只想提取中间部分,例如。 hsa-mir-521-3phsa-mir-947b

到目前为止,我已经尝试了以下方法:

a1 <- substr(a, 8,21) 
[1] "hsa-mir-521-3p" "hsa-mir-947b.r"  

这显然不起作用,因为我想要的子字符串有不同的长度

a2 <- sub('miRNA__', '', a)
[1] "hsa-mir-521-3p.iso.t5:" "hsa-mir-947b.ref.t5:"  

这可以删除上游字符串 (“miRNA__”),但我仍然需要删除下游字符串

有人可以建议我还可以尝试什么,或者是否有更简单的方法来实现这一目标?我还在学习如何使用 R 进行编码。非常感谢!

【问题讨论】:

  • 在第二个字符串示例 hsa-mir-947-8p 中,8p 不在向量 a (hsa-mir-947b.ref.t5:) 中。你能纠正这个吗?
  • @iago 你说得对!谢谢你指出。我在这里犯了一个错误。它应该是 hsa-mir-947b。我已经编辑了我的问题

标签: r substring


【解决方案1】:

您尚未明确定义“中间部分”,但根据共享的数据,我们可以提取最后一个下划线 ("_") 和点 (".") 之间的所有内容。

sub('.*_(.*?)\\..*', '\\1', a)
#[1] "hsa-mir-521-3p" "hsa-mir-947b"  

【讨论】:

    【解决方案2】:

    你可以试试下面的正则表达式

    > gsub(".*_|\\..*","",a)
    [1] "hsa-mir-521-3p" "hsa-mir-947b" 
    

    删除最左边的 (.*_) 和最右边的 (\\..*) 部分,因此保留中间部分。

    【讨论】:

      【解决方案3】:

      我们也可以使用base R中的trimws

      trimws(a, whitespace = '.*_|\\..*')
      #[1] "hsa-mir-521-3p" "hsa-mir-947b"  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多