【问题标题】:Delete pattern in string and semicolon before and/or after (R)在 (R) 之前和/或之后删除字符串和分号中的模式
【发布时间】:2016-06-27 21:53:07
【问题描述】:

在基因组学中,我们经常需要处理许多用分号分隔的基因名称字符串。我想做模式匹配(在字符串中找到特定的基因名称),然后从字符串中删除它。我还需要删除基因名称之前或之后的任何分号。这个玩具示例说明了这个问题。

s <- c("a;b;x", "a;x;b", "x;b", "x")
library(stringr)
str_replace(s, "x", "")
#[1] "a;b;" "a;;b" ";b"   ""

期望的输出应该是。

#[1] "a;b" "a;b" "b"   ""

我也可以为;xx; 进行模式匹配,这会给我输出;但这不会很有效。我们也可以使用gsubstringi 包,这样也可以。

【问题讨论】:

    标签: r string replace


    【解决方案1】:

    如果x 是字符串的起始字符,则删除其后的x 和可选的;,否则删除它之前的x 和可选的;,这应该涵盖列出的所有情况:

    str_replace(s, "^x(;?)|(;?)x", "")
    # [1] "a;b" "a;b" "b"   ""    
    

    【讨论】:

    • 谢谢。但是第一个元素还有一个额外的 ;在末尾。 “a;b;”应该是“a;b”。
    【解决方案2】:

    我们可以从base R使用gsub

    gsub("^x;|;?x", "", s)
    #[1] "a;b" "a;b" "b"   ""   
    

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 2020-07-29
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多