【问题标题】:gsub character string which contains special characters [duplicate]包含特殊字符的gsub字符串[重复]
【发布时间】:2019-02-11 18:20:21
【问题描述】:

我是 R 的新手,虽然我可以看到我的问题的变体已被多次询问,但我似乎找不到任何 gsub 的变体,它只是删除了特殊字符。实际上我撞到了一堵砖墙。

我有一个包含 73 个变量的数据框。变量 2,AGENT_REFERENCE_BROKER,是基于字符的。

因此,此列中的字段之一的示例是:<U+00A0>CUB00716

我只需要删除以下字符,

我已经按照互联网上的示例浏览了大约 30 种不同的 gsub、dplyr 和正则表达式组合,但没有一个人做过任何删除这些字符的操作。

我知道 + 是作为转义字符的类,因此需要一个 \ 或一个固定 = TRUE 的参数,或者 + 放在括号 [] 中。

我尝试过的一些 gsub 命令示例如下。

clean$AGENT_REFERENCE_BROKER <- gsub('\\+', '', clean$AGENT_REFERENCE_BROKER)

clean$AGENT_REFERENCE_BROKER <- gsub('[+]', '', clean$AGENT_REFERENCE_BROKER)

require(dplyr)
clean <- clean %>%
mutate_all(funs(gsub("\\<\\>\\+", "", .)))

我确信我遗漏了一些对于论坛上的大多数人来说显而易见的东西,但是对于我的生活,我不明白为什么它不会只删除 + 字符。

【问题讨论】:

  • gsub('[your_characters_to_match]+', '', vector) 应该没问题。你有任何字符串示例吗?
  • 是的,"[&lt;+&gt;]+" 模式应该删除所有这些。使用括号,您无需转义任何内容。
  • 抱歉,没有意识到符号已从我粘贴的示例中删除。 “CUB00716”就是一个例子。我现在只是在尝试你的建议,认为这对我来说是一个语法问题。
  • 这些很可能是 Unicode 字符,而不是文字 &lt;+&gt; 字符。
  • @WiktorStribiżew 我可以吻你。我已经挣扎了 3 个小时尝试正则表达式、gsub 和天知道还有什么。是的,它们是 unicode。我用了iconv,它们不见了。一些卑鄙的人投了-1票是值得的。再次感谢

标签: r regex gsub


【解决方案1】:

这会删除 3 个指示的字符:

gsub("[<>+]", "", "abc+def<ghi>xyz")
### [1] "abcdefghixyz"

?regexp 中寻找关于字符类的讨论。

【讨论】:

  • 您好,感谢您的建议,我尝试了以下代码:clean$AGENT_REFERENCE_BROKER +]", "", "abc+defxyz", clean$AGENT_REFERENCE_BROKER) 但它最终把每一行都变成了 abcdefghixyz
  • 这毫无意义“abc ...”是示例输入,因为问题没有(但应该)包含输入。前两个参数应该和答案一样,第三个参数应该是输入向量。请仔细阅读?gsub
  • 抱歉,如前所述,我对 R 很陌生。是的,我可以看出那没有意义。我想删除 的任何实例,我不想用其他文本替换它们,只是将它们清空。可能我使用了错误的函数,但我之前在 SQL 中使用过 REGEX 并用它来删除字符。 gsub 描述建议 gsub(pattern, replacement, x, 在下面的代码 clean$AGENT_REFERENCE_BROKER &lt;- gsub("[&lt;&gt;+]", "",clean$AGENT_REFERENCE_BROKER) 我有模式,替换 "" 并指定值,但它使列保持原样。
  • 将答案中显示的代码复制并粘贴到您的 R 会话中,您应该会得到与此处所示相同的答案。由于您没有提供可重现的示例,因此您可以自己弄清楚您所拥有的内容与所展示的内容有何不同。
  • cmets 中的 Wiktor 好心地将问题确定为 unicode 字符,这是我以前没有遇到过的。现已修复。
【解决方案2】:

以下

gsub('[your_characters_to_match]+', '', vector)

应该可以工作。

【讨论】:

  • 您好,我已经尝试了以下两个指令,并且都保持行不变,没有变化:clean$AGENT_REFERENCE_BROKER = as.character(gsub('[&lt;,+,&gt;]+', '', clean$AGENT_REFERENCE_BROKER))clean$AGENT_REFERENCE_BROKER = as.character(gsub('[&lt;+&gt;]+', '', clean$AGENT_REFERENCE_BROKER))
猜你喜欢
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多