【问题标题】:remove/replace specific words or phrases from character strings - R从字符串中删除/替换特定的单词或短语 - R
【发布时间】:2017-06-12 12:18:51
【问题描述】:

我在这里和其他地方环顾四周,发现了许多类似的问题,但没有一个能准确回答我的问题。我需要清理命名约定,特别是从特定列/变量而不是整个数据集中替换/删除某些单词和短语。我正在从 SPSS 迁移到 R,我在下面的 SPSS 中有一个执行此操作的代码示例,但我不确定如何在 R 中执行此操作。

EG:

"Acadia Parish" --> "Acadia"(删除 Parish 和 Parish 之前的空格)

"Fifth District" --> "Fifth"(删除 District 和 District 之前的空格)

SPSS 语法:

COMPUTE county=REPLACE(county,' Parish','').

在 32,000 个案例的列中只有少数这个问题的实例,需要替换/删除的内容各不相同,并且案例可以重复(包含“教区”的短语有几十个实例),这意味着它要快得多要对需要删除/替换的内容进行编码,它不像正则表达式那样简单或干净地删除所有空格、特定单词或字符之后的所有字符、所有特殊字符等。它必须包含前导空格。

我查看了 R 中的 replace() gsub() 和其他类似命令,但它们都涉及创建向量,或者看起来确实如此。我想要的是查找我指定的字符的语法,它可以包括前导或尾随空格,并将它们替换为我指定的东西,它可以不包含任何内容,如果它没有找到特定的字符,情况是不变。

是的,我最终会多次重复相同的语法,创建向量可能更容易,但如果可能的话,我想获得我描述的语法,因为我还需要执行其他类似的操作。

感谢您的关注。

【问题讨论】:

  • 你的列一个向量。因此,使用 gsub 创建修改后的向量正是您想要的。
  • 再一次,使用gsub 或类似的东西并学习一些正则表达式可能是你最好的选择。大量资源,例如:regexr.com
  • @RyanMorton - 返回错误消息“找不到对象‘县’。” County 是变量名,不确定我没有做什么看起来正确的 b/c。鉴于格雷戈尔的解释。

标签: r string replace substring recode


【解决方案1】:
> x <- c("Acadia Parish", "Fifth District")
> x2 <- gsub("^(\\w*).*$", "\\1", x)
> x2
[1] "Acadia" "Fifth"

图例:

  • ^ 模式开始。
  • () 组(或令牌)。
  • \w* 单词字符出现一次或多次超过 1 次。
  • .* 任何字符出现一次或多次,换行符\n除外。
  • $ 模式结束。
  • \1 从正则表达式返回组

【讨论】:

    【解决方案2】:

    也许我遗漏了一些东西,但我不明白为什么你不能简单地在你的正则表达式中使用条件,然后去掉烦人的空白。

    string <- c("Arcadia Parish", "Fifth District")
    
    bad_words <- c("Parish", "District") # Write all the words you want removed here!
    bad_regex <- paste(bad_words, collapse = "|")
    
    trimws( sub(bad_regex, "", string) )
    
    # [1] "Arcadia" "Fifth" 
    

    【讨论】:

      【解决方案3】:
      dataframename$varname <- gsub(" Parish","", dataframename$varname)
      

      【讨论】:

        猜你喜欢
        • 2020-08-09
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多