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.