2012-04-24 94 views
59

¿Cómo eliminar todos los caracteres especiales en una cadena dada en R y reemplazar cada carácter especial con espacio?Eliminar todos los caracteres especiales de una cadena en R?

Los caracteres especiales para eliminar son: [email protected]#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:] se va a hacer la mitad del trabajo.

Pregunta_2: ¿Pero cómo eliminar, por ejemplo, estos caracteres de idiomas extranjeros: â í ü Â á ą ę ś ć?

ANSWER_2: sustituir [^[:alnum:]] con [^a-zA-Z0-9] en regex o regexpr:
regex[^a-zA-Z0-9]

+4

¿Cuál es la definición de "carácter especial"? – kohske

+0

Mi propia definición sería cada personaje que no está en Unicode ;-). Pero creo que muchas otras personas estarían en desacuerdo. – Joey

+0

Tal vez eche un vistazo a las funciones 'sub' o' gsub'. –

Respuesta

116

Es necesario utilizar regular expressions para identificar los caracteres no deseados. Para obtener el código más fácil de leer, desea el str_replace_all del paquete stringr, aunque gsub de la base R también funciona.

La expresión regular exacta depende de lo que está intentando hacer. Simplemente podría eliminar los caracteres específicos que dio en la pregunta, pero es mucho más fácil eliminar todos los caracteres de puntuación.

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

(La base R equivalente es gsub("[[:punct:]]", " ", x).)

Una alternativa es que cambiar todos los caracteres no alfanuméricos.

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

Tenga en cuenta que la definición de lo que constituye una letra o un número o una marca punctuatution varía ligeramente dependiendo de la configuración regional, por lo que puede que tenga que experimentar un poco para conseguir exactamente lo que quiere.

+6

nice answers +1 Es posible que desee reemplazar el '" "' con '" "' de lo contrario, tiene un espacio en blanco vacío en la cadena. –

+4

@TylerRinker: Es cierto, aunque QBik específicamente pidió espacios. –

+2

buena llamada, se perdió eso. –

4

En lugar de usar expresiones regulares para eliminar esos caracteres "locos", simplemente conviértalos en ASCII, lo que eliminará los acentos, manteniendo las letras.

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

que se traduce en

[1] "Abcdeacoauu" 
0

Convertir los caracteres especiales a apóstrofe,

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

A continuación código para quitar adicional ''' apóstrofe

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

Uso gsub(..) función para reemplazar el carácter especial con el apóstrofo

Cuestiones relacionadas