Saltar al contenido

¿Cómo recortar los espacios en blanco cuando los recortes no funcionan?

Después de investigar en diversos repositorios y sitios webs finalmente hallamos la resolución que te compartiremos pronto.

Solución:

El carácter con el código ASCII 160 se llama “espacio que no se rompe”. Se puede leer sobre él en Wikipedia:

https://en.wikipedia.org/wiki/Non-breaking_space

trimws() la función no la incluye en la lista de caracteres que son eliminados por la función:

x <- intToUtf8(c(160,49,49,57,57,46,48,48))
x
#[1] " 1199.00"

trimws(x)
#[1] " 1199.00"

Una forma de deshacerse de él es usando str_trim() función de stringr Biblioteca:

library(stringr)
y <- str_trim(x)
trimws(y)
[1] "1199.00"

Otra forma aplicando iconv() función primero:

y <- iconv(x, from = 'UTF-8', to = 'ASCII//TRANSLIT')
trimws(y)
#[1] "1199.00"

ACTUALIZAR
Para explicar por qué trimws () no elimina el carácter "invisible" descrito anteriormente y stringr: str_trim () sí.

Esto es lo que leemos de trimws() ayuda:

Para la portabilidad, se toma 'espacio en blanco' como la clase de carácter [
trn] (espacio, tabulación horizontal, salto de línea, retorno de carro)

Para stringr:str_trim() El tema de ayuda en sí no especifica lo que se considera un "espacio en blanco", pero si consulta la ayuda para stri_trim_both que es llamado por str_trim() ya verás: stri_trim_both(str, pattern = "\PWspace")
Básicamente, en este caso, se utiliza una gama más amplia de caracteres que se consideran espacios en blanco.

ACTUALIZACIÓN 2

Como señaló @ H1, la versión 3.6.0 proporciona una opción para especificar qué considerar un carácter de espacio en blanco:

Internamente, 'sub (re, "", *, perl = TRUE)', es decir, se utilizan expresiones regulares de la biblioteca PCRE. Para la portabilidad, el 'espacio en blanco' predeterminado es la clase de carácter '[ trn]'(espacio, tabulación horizontal, retorno de carro, nueva línea). Alternativamente, '[hv]'es una buena generalización (PCRE) para que coincida con todos los caracteres de espacio en blanco horizontales y verticales Unicode, consulte también https://www.pcre.org>.

Entonces, si está utilizando la versión 3.6.0 o posterior, simplemente puede hacer:

> trimws(x,whitespace = "[\h\v]")
#[1] "1199.00"

Desde la versión R 3.6.0 trimws() tiene un argumento que le permite definir lo que se considera espacio en blanco, que en este caso es un espacio sin interrupciones.

trimws(x, whitespace = "u00A0|\s")
[1] "1199.00"

Te invitamos a ayudar nuestro ensayo escribiendo un comentario o dejando una puntuación te damos las gracias.

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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