Respuestas:
En general, queremos una solución vectorizada, así que aquí hay un mejor ejemplo de prueba:
whitespace <- " \t\n\r\v\f" # space, tab, newline,
# carriage return, vertical tab, form feed
x <- c(
" x y ", # spaces before, after and in between
" \u2190 \u2192 ", # contains unicode chars
paste0( # varied whitespace
whitespace,
"x",
whitespace,
"y",
whitespace,
collapse = ""
),
NA # missing
)
## [1] " x y "
## [2] " ← → "
## [3] " \t\n\r\v\fx \t\n\r\v\fy \t\n\r\v\f"
## [4] NA
gsub
gsub
reemplaza todas las instancias de una cadena ( fixed = TRUE
) o expresión regular ( fixed = FALSE
el valor predeterminado) con otra cadena. Para eliminar todos los espacios, use:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
Como DWin señaló, en este caso fixed = TRUE
no es necesario, pero proporciona un rendimiento ligeramente mejor ya que hacer coincidir una cadena fija es más rápido que hacer coincidir una expresión regular.
Si desea eliminar todos los tipos de espacios en blanco, use:
gsub("[[:space:]]", "", x) # note the double square brackets
## [1] "xy" "←→" "xy" NA
gsub("\\s", "", x) # same; note the double backslash
library(regex)
gsub(space(), "", x) # same
"[:space:]"
es un grupo de expresión regular específico de R que coincide con todos los caracteres de espacio. \s
es una expresión regular independiente del lenguaje que hace lo mismo.
stringr
enfoque: str_replace_all
ystr_trim
stringr
proporciona más envoltorios legibles para los humanos alrededor de las funciones básicas de R (aunque a partir de diciembre de 2014, la versión de desarrollo tiene una rama incorporada stringi
, mencionada a continuación). Los equivalentes de los comandos anteriores, usando [ str_replace_all][3]
, son:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
también tiene una str_trim
función que elimina solo los espacios en blanco iniciales y finales.
str_trim(x)
## [1] "x y" "← →" "x \t\n\r\v\fy" NA
str_trim(x, "left")
## [1] "x y " "← → "
## [3] "x \t\n\r\v\fy \t\n\r\v\f" NA
str_trim(x, "right")
## [1] " x y" " ← →"
## [3] " \t\n\r\v\fx \t\n\r\v\fy" NA
stringi
enfoque: stri_replace_all_charclass
ystri_trim
stringi
está construido sobre la biblioteca de la UCI independiente de la plataforma y tiene un amplio conjunto de funciones de manipulación de cadenas. Los equivalentes de lo anterior son:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Aquí "\\p{WHITE_SPACE}"
hay una sintaxis alternativa para el conjunto de puntos de código Unicode considerados espacios en blanco, equivalentes a "[[:space:]]"
, "\\s"
y space()
. Para reemplazos de expresiones regulares más complejas, también existe stri_replace_all_regex
.
stringi
También tiene funciones de recorte .
stri_trim(x)
stri_trim_both(x) # same
stri_trim(x, "left")
stri_trim_left(x) # same
stri_trim(x, "right")
stri_trim_right(x) # same
"[[:space:]]"
y "\\s"
?
Acabo de enterarme del paquete "stringr" para eliminar el espacio en blanco desde el principio y el final de una cadena con str_trim (, side = "both") pero también tiene una función de reemplazo para que:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Tenga en cuenta que las almas escritas anteriormente eliminan solo el espacio. Si también desea eliminar la pestaña o el uso stri_replace_all_charclass
de una nueva línea del stringi
paquete.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
paquete está en CRAN ahora, ¡disfrútalo! :)
stringi
durante unos meses y haber visto / aprendido lo poderoso y eficiente que es, se ha convertido en mi paquete de referencia para operaciones con cadenas. Ustedes hicieron un trabajo increíble con eso.
Se usa [[:blank:]]
para unir cualquier tipo de caracteres de espacio en blanco horizontal.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
¡La función str_squish()
del paquete stringr
de tidyverse hace la magia!
library(dplyr)
library(stringr)
df <- data.frame(a = c(" aZe aze s", "wxc s aze "),
b = c(" 12 12 ", "34e e4 "),
stringsAsFactors = FALSE)
df <- df %>%
rowwise() %>%
mutate_all(funs(str_squish(.))) %>%
ungroup()
df
# A tibble: 2 x 2
a b
<chr> <chr>
1 aZe aze s 12 12
2 wxc s aze 34e e4
str_squish
No elimina todos los espacios. Simplemente recorta y sustituye múltiples espacios por uno.
De esta manera, puede eliminar todos los espacios de todas las variables de caracteres en su marco de datos. Si prefiere elegir solo algunas de las variables, use mutate
o mutate_at
.
library(dplyr)
library(stringr)
remove_all_ws<- function(string){
return(gsub(" ", "", str_squish(string)))
}
df<-df %>% mutate_if(is.character, remove_all_ws)
Desde la biblioteca stringr puedes probar esto:
Eliminar relleno en blanco
biblioteca (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")