【问题标题】:How can I replace the spaces in a string with two different characters?如何用两个不同的字符替换字符串中的空格?
【发布时间】:2019-11-22 13:53:55
【问题描述】:

我有一列数据字符串看起来像1402 2010 10

我想将第一个空格替换为下划线,第二个空格替换为正斜杠,使其看起来像这样1402_2010/10

【问题讨论】:

    标签: r string gsub


    【解决方案1】:

    一个想法来自sub

    sub('(^[0-9]+)\\s([0-9]+)\\s([0-9]+)', '\\1_\\2/\\3', '1402 2010 10')
    #[1] "1402_2010/10"
    

    【讨论】:

      【解决方案2】:

      你可以嵌套sub如下:

      x <- c("1402 2010 10")
      
      sub(" ", "/", sub(" ", "_", x))
      
      #"1402_2010/10"
      

      ?sub

      子(模式,替换,x)。

      • x 是寻找匹配的字符向量。

      这里的技巧是使用sub 代替x(它与_ 匹配它找到的第一个空格)并且外部sub/ 替换它找到的第一个空格。成为 x 的第二个空间。

      注意:这只会替换第一个和第二个空格,以防您的字符串有更多空格。

      【讨论】:

      • 这不是和之前发的一样吗? - 虽然你的更完整......
      • 使用gsub 替换整个字符串,如我的注释中所示。例如x &lt;- c("1402 2010 10 200")。我觉得不然,我可以删除它。
      【解决方案3】:

      使用gsubfn,您可以编写一个函数来跟踪匹配count 的索引,例如1 表示第一次匹配,2 表示第二次匹配等,并相应地更改替换

      gsubfn(' ', proto(fun = function(this, x) c('_', '/')[count]), v)
      #[1] "1402_2010/10"
      

      或者,使用 Reduce 与 base R 的想法相同

      seq_sub <- function(x, pattern, replacement){
        Reduce(function(x, y) sub(pattern, y, x), replacement, init = x)
      }
      
      seq_sub('some words here ', ' ', c(9, 5, 2))
      # [1] "some9words5here2"
      

      【讨论】:

        【解决方案4】:

        试试这个,嵌套sub()(第一个空格)和gsub()(其他空格):

           v <- "1402 2010 10"
           gsub(" ","/",sub(" ","_",v))
           [1] "1402_2010/10"
        

        【讨论】:

          猜你喜欢
          • 2013-11-27
          • 2013-05-09
          • 1970-01-01
          • 1970-01-01
          • 2021-12-04
          • 1970-01-01
          • 2018-12-01
          • 2020-06-02
          • 2022-12-15
          相关资源
          最近更新 更多