Saltar al contenido

en R, use gsub para eliminar toda la puntuación excepto el punto

Luego de de una larga compilación de información hemos podido solucionar este atolladero que presentan muchos usuarios. Te brindamos la respuesta y nuestro deseo es resultarte de mucha ayuda.

Solución:

Puedes volver a poner algunas coincidencias como esta:

 sub("([.-])|[[:punct:]]", "\1", as.matrix(z))
     X..1. X..2.  
[1,] "1"   "6"    
[2,] "2"   "7.235"
[3,] "3"   "8"    
[4,] "4"   "9"    
[5,] "5"   "-10"  

Aquí me quedo con el . y -.

Y supongo que el siguiente paso es forzar su resultado a una matriz numérica, así que aquí combino los 2 pasos así:

matrix(as.numeric(sub("([.-])|[[:punct:]]", "\1", as.matrix(z))),ncol=2)
   [,1]    [,2]
[1,]    1   6.000
[2,]    2   7.235
[3,]    3   8.000
[4,]    4   9.000
[5,]    5 -10.000

Puedes probar este código. Lo encontré bastante útil.

x <- c('6,345', '7.235', '8', '$9', '-10')
gsub("[^[:alnum:]\-\.\s]", "", x)

[1] "6345"  "7.235" "8"     "9"     "-10"

x <- c('1', '[email protected]', '3', '4', '£5')
gsub("[^[:alnum:]\-\.\s]", "", x)

[1] "1" "2" "3" "4" "5"

Este códigogsub(“[^[:alnum:]]”, “”, x)) elimina todo lo que no incluye términos alfanuméricos. Luego lo agregamos a la lista de excepciones. Aquí agregamos guión (-), punto final (.) y espacio (s) para obtener gsub(“[^[:alnum:]-.s]”, “, x). Ahora quita todo lo que no sea alfanumérico, guión, punto y espacio.

Otra forma de pensarlo es ¿qué quieres conservar? Puede usar expresiones regulares tanto para mantener la información como para omitirla. Tengo muchos marcos de datos de los que necesito limpiar unidades y convertir varias filas en una sola pasada y me resulta más fácil usar algo del apply familia en estos casos.

Recreando el ejemplo:

a <- c('1', '[email protected]', '3', '4', '£5')
b <- c('6', '7.235', '8', '$9', '-10')
z <- matrix(data = c(a, b), nrow = length(a), ncol=2)

Entonces usa apply junto con gsub.

apply(z, 2, function(x) as.numeric(gsub('[^0-9\.\-]', '', x)))
      [,1]    [,2]
[1,]    1   6.000
[2,]    2   7.235
[3,]    3   8.000
[4,]    4   9.000
[5,]    5 -10.000

Esto le indica a R que haga coincidir todo excepto dígitos, puntos y guiones/guiones. Personalmente, lo encuentro mucho más limpio y fácil de usar en estas situaciones y da el mismo resultado.

Además, la documentación tiene una buena explicación de estas poderosas pero confusas expresiones regulares.

https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html

O ?regex

Aquí puedes ver las comentarios y valoraciones de los lectores

Si tienes algún titubeo o disposición de enriquecer nuestro escrito eres capaz de ejecutar un paráfrasis y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *