繁体   English   中英

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

[英]Remove all special characters from a string in R?

如何从 R 中的字符串中删除所有特殊字符并用空格替换它们?

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

我用[:punct:]模式尝试了regex ,但它只删除标点符号。

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

答案:使用[^[:alnum:]]删除~!@#$%^&*(){}_+:"<>?,./;'[]-=并使用[^a-zA-Z0-9]regex或正则表达式函数中删除â í ü Â á ą ę ś ć regexpr

基础 R 中的解决方案:

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

您需要使用正则表达式来识别不需要的字符。 对于最易于阅读的代码,您需要stringr包中的str_replace_all ,尽管来自基本 R 的gsub也可以。

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

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

(基本的 R 等效项是gsub("[[:punct:]]", " ", x) 。)

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

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

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

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

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

这导致

[1] "Abcdeacoauu"

将特殊字符转换为撇号,

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

下面的代码删除额外的'''撇号

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM