【问题标题】:Equivalent function to excel's replace相当于excel的替换功能
【发布时间】:2019-12-02 12:17:39
【问题描述】:

我想为数百个单词添加引号(由空格包围)并用逗号分隔它们。最好只使用一个或几个函数来避免由于时间开销而手动替换。

示例问题:

words <- c("Paris Milan Berlin")

输出应该是:"Paris","Milan","Berlin"

我已经尝试过gsub()str_extract(),但是我没有得到理想的结果。

【问题讨论】:

  • 嗨,现在我阅读了答案,我认为您是否想要一个字符 vector (在这种情况下包含三个元素)还是一个带有文本 "Paris","Milan","Berlin" 的标量字符串

标签: r regex replace quotation-marks


【解决方案1】:

您可以使用gsub" 放在单词周围并在它们之间放置,

x <- gsub("[[:blank:]]+", ",", gsub('(\\b[[:alnum:]]+\\b)', '"\\1"', words))
x
#[1] "\"Paris\",\"Milan\",\"Berlin\""

noquote(x)
#"Paris","Milan","Berlin"

或@zx8754 在 cmets 中建议的事件更短

paste0('"', gsub(' ', '","',  words), '"')

【讨论】:

  • 也许吧? gsub(' ','","', words, fixed = TRUE)
  • @zx8754 哦,是的,这要短得多!谢谢。但是缺少前导和尾随"。我用paste添加它们。
  • 非常感谢。这行得通,但我怎样才能避免结果中出现这些反斜杠?
  • @Maria26 反斜杠就是 R 显示引号的方式。您可以使用noquotecatwriteLines 来显示没有反斜杠转义的字符串。见stackoverflow.com/q/45362944/10488504
【解决方案2】:

使用base R(假设你总是想在一个空间上分割)你可以做的很简单

unlist(strsplit(words, split = " "))

【讨论】:

    【解决方案3】:

    可能有几种方法。这是其中之一:

    library(tokenizers)
    words <- c("Paris Milan Berlin")
    tokenize_words(words, simplify =TRUE)
    
    > tokenize_words(words, simplify =TRUE)
    [1] "paris"  "milan"  "berlin"
    

    【讨论】:

      【解决方案4】:

      除了使用strsplit的方法(@Valeri Voev提到的),还有一种方法是使用regmatches()gregexpr,即

      regmatches(words,gregexpr("[[:alnum:]]+",words))[[1]]
      

      给了

      > regmatches(words,gregexpr("[[:alnum:]]+",words))[[1]]
      [1] "Paris"  "Milan"  "Berlin"
      

      输出字符串,完整代码如下:

      words <- c("Paris Milan Berlin")
      
      r <- regmatches(words,gregexpr("[[:alnum:]]+",words))[[1]]
      
      res1 <- toString(sapply(r, function(v) paste0('"',v,'"')))
      # > res1
      # [1] "\"Paris\", \"Milan\", \"Berlin\""
      
      res2 <- toString(sapply(r, function(v) paste0("'",v,"'")))
      # > res2
      # [1] "'Paris', 'Milan', 'Berlin'"
      

      【讨论】:

      • 看起来很棒!但是,也有带有数字的单词,例如“Paris01”或“Milan04”。如果我使用你的功能,数字就会消失。我只得到“Paris”、“Milan”而不是“Paris01”、“Milan04”。你有想法吗? :) 非常感谢!!
      • @Maria26 那你可以试试[[:alnum:]],请看我的更新
      • 太棒了!它有效,但单词之间缺少逗号,请参阅以下内容:[1] "Paris","Milan","Berlin"
      • @Maria26 你想要'"Paris", "Milan" ,"Berlin"''"Paris, Milan, Berlin"' 在字符串中加引号吗?
      • 第一个:)
      猜你喜欢
      • 2015-11-26
      • 2014-09-17
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多