Remover todos os caracteres especiais de uma string em R?

118

Como remover todos os caracteres especiais da string em R e substituí-los por espaços?

Alguns caracteres especiais a serem removidos são: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

Eu tentei regexcom o [:punct:]padrão, mas ele remove apenas marcas de pontuação.

Pergunta 2: E como remover caracteres de línguas estrangeiras como â í ü Â á ą ę ś ć:?

Resposta: Use [^[:alnum:]]para remover ~!@#$%^&*(){}_+:"<>?,./;'[]-=e use [^a-zA-Z0-9]para remover também â í ü Â á ą ę ś ćnas funções regexou regexpr.

Qbik
fonte
4
Qual é a definição de "personagem especial"?
kohske
Minha própria definição seria cada caractere que não está em Unicode ;-). Mas acho que muitas outras pessoas discordariam.
Joey
Talvez dê uma olhada em subou gsubfunções.
Paul Hiemstra
5
regex [: punct:] vai fazer metade do trabalho ou mayby ​​all
Qbik

Respostas:

197

Você precisa usar expressões regulares para identificar os caracteres indesejados. Para o código mais facilmente legível, você quer o str_replace_alldo stringrpacote, embora a gsubpartir da base R funcione da mesma forma.

A expressão regular exata depende do que você está tentando fazer. Você poderia simplesmente remover aqueles caracteres específicos que você deu na pergunta, mas é muito mais fácil remover todos os caracteres de pontuação.

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

(O equivalente de base R é gsub("[[:punct:]]", " ", x).)

Uma alternativa é trocar todos os caracteres não alfanuméricos.

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

Observe que a definição do que constitui uma letra, um número ou uma marca de pontuação varia um pouco dependendo da sua localidade, portanto, pode ser necessário experimentar um pouco para obter exatamente o que deseja.

Algodão rico
fonte
11
boas respostas +1 Você pode querer substituir o " "por, ""caso contrário, você terá um espaço em branco vazio na string.
Tyler Rinker
8
@TylerRinker: Verdade, embora o QBik tenha pedido especificamente espaços.
Richie Cotton
8
Como deletar remowe aqueles personagens malucos â í ü Â á:?
Qbik
1
Você precisa ler as expressões regulares. Comece com o link na minha resposta e depois leia ?regexe ?regexpr.
Richie Cotton
1
Tente substituir [^[:alnum:]]por [^a-zA-Z0-9]ou possivelmente \\W.
Richie Cotton
28

Em vez de usar regex para remover esses caracteres "loucos", basta convertê-los para ASCII, o que removerá os acentos, mas manterá as letras.

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

o que resulta em

[1] "Abcdeacoauu"
Felipe Alvarenga
fonte
Eu tive que acrescentar iconv(astr, from="UFT-8", to="ASCII//TRANSLIT"), caso contrário, com personagens franceses çseria um pouco engraçado.
Duccio A de
8

Converta os caracteres especiais em apóstrofos,

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

Codifique abaixo para remover apóstrofo '' 'extra

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

Use a gsub(..)função para substituir o caractere especial por apóstrofo

UMESH NITNAWARE
fonte