从R中的字符串中删除所有特殊字符?


116

如何从R中的字符串中删除所有特殊字符并将其替换为空格?

要删除的一些特殊字符是: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

我已经尝试过regex使用[:punct:]模式,但是它仅删除了标点符号。

问题2:以及如何从外语中删除字符,如:â í ü Â á ą ę ś ć

答:[^[:alnum:]]用于删除~!@#$%^&*(){}_+:"<>?,./;'[]-=[^a-zA-Z0-9]也用于删除â í ü Â á ą ę ś ćin regexregexpr功能。


4
“特殊字符”的解释是什么?
kohske 2012年

我自己的定义是每个非Unicode ;-)的字符。但是我想很多其他人会不同意。
乔伊

也许看一下subgsub功能。
Paul Hiemstra

5
regex [:punct:]会完成一半的工作或可能使所有工作变得轻松
Qbik 2012年

Answers:


196

您需要使用正则表达式来识别不需要的字符。对于最易读的代码,您希望str_replace_allstringr包中获得,尽管gsub从R开始也可以。

确切的正则表达式取决于您要执行的操作。您可以删除问题中输入的那些特定字符,但是删除所有标点符号则容易得多。

x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")

(基数R等于gsub("[[:punct:]]", " ", x)。)

另一种方法是换出所有非字母数字字符。

str_replace_all(x, "[^[:alnum:]]", " ")

请注意,由字母,数字或标点符号构成的定义会因您的语言环境而略有不同,因此您可能需要进行一些实验才能准确获得所需的内容。


11
不错的答案+1您可能要用替换" """否则字符串中的空白。
泰勒·林克

8
@TylerRinker:是的,尽管QBik确实要求空格。
Richie Cotton

8
如何删除删除那些疯狂的角色:â í ü Â á
Qbik 2012年

1
您需要阅读正则表达式。从答案中的链接开始,然后阅读?regex?regexpr
Richie Cotton

1
尝试更换[^[:alnum:]][^a-zA-Z0-9]或可能\\W
Richie Cotton

27

无需使用正则表达式删除那些“疯狂的”字符,只需将它们转换为ASCII,即可删除重音符号,但会保留字母。

astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')

导致

[1] "Abcdeacoauu"

我必须添加iconv(astr, from="UFT-8", to="ASCII//TRANSLIT"),否则使用法语字符ç会有点有趣。
Duccio A

8

将特殊字符转换为撇号,

Data  <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)

在下面的代码中删除多余的撇号

Data <- gsub("''","" , Data ,ignore.case = TRUE)

使用gsub(..)功能将特殊字符替换为撇号

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.