¿Cómo eliminar todos los espacios en blanco de una cadena?

Entonces " xx yy 11 22 33 " se convertirá en "xxyy112233" . ¿Cómo puedo conseguir esto?

En general, queremos una solución que se vectorice, 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( " xy ", # spaces before, after and in between " \u2190 \u2192 ", # contains unicode chars paste0( # varied whitespace whitespace, "x", whitespace, "y", whitespace, collapse = "" ), NA # missing ) ## [1] " xy " ## [2] " ← → " ## [3] " \t\n\r\v\fx \t\n\r\v\fy \t\n\r\v\f" ## [4] NA 

El enfoque de base R: gsub

gsub reemplaza todas las instancias de una cadena ( fixed = TRUE ) o una expresión regular ( fixed = FALSE , la predeterminada) 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 observó DWin, en este caso fixed = TRUE no es necesario, pero ofrece un rendimiento ligeramente mejor ya que la coincidencia de una cadena fija es más rápida que la coincidencia de 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 expresiones regulares específico de R que coincide con todos los caracteres espaciales. \s es una expresión regular independiente del lenguaje que hace lo mismo.


El enfoque de stringr : str_replace_all y str_trim

stringr proporciona más envoltorios legibles por humanos alrededor de las funciones R base (aunque a partir de diciembre de 2014, la versión de desarrollo tiene una twig construida encima de stringi , que se menciona 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 función str_trim que elimina solo el espacio en blanco str_trim y final.

 str_trim(x) ## [1] "xy" "← →" "x \t\n\r\v\fy" NA str_trim(x, "left") ## [1] "xy " "← → " ## [3] "x \t\n\r\v\fy \t\n\r\v\f" NA str_trim(x, "right") ## [1] " xy" " ← →" ## [3] " \t\n\r\v\fx \t\n\r\v\fy" NA 

El enfoque de stri_replace_all_charclass : stri_replace_all_charclass y stri_trim

stringi se basa en la biblioteca de la ICU independiente de la plataforma y tiene un amplio conjunto de funciones de manipulación de cadenas. Los equivalentes de los anteriores son:

 library(stringi) stri_replace_all_fixed(x, " ", "") stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "") 

Aquí "\\p{WHITE_SPACE}" es una syntax alternativa para el conjunto de puntos de código Unicode considerados como espacios en blanco, equivalente a "[[:space:]]" , "\\s" y space() . Para reemplazos de expresiones regulares más complejos, también hay 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 

Acabo de enterarme del paquete “stringr” para eliminar el espacio en blanco del 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 grabados anteriormente eliminan solo el espacio. Si también desea eliminar la pestaña o la nueva línea, use stri_replace_all_charclass del paquete stringi .

 library(stringi) stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "") ## [1] "alamakota" 

Utilice [[:blank:]] para unir cualquier tipo de caracteres horizontales de espacio en blanco.

 gsub("[[:blank:]]", "", " xx yy 11 22 33 ") # [1] "xxyy112233" 

x = “xx yy 11 22 33”

gsub (“”, “”, x)

[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 ab   1 aZe aze s 12 12 2 wxc s aze 34e e4 

Prueba esto:

  1. Eliminar espacios de relleno consecutivos
  2. eliminar relleno en blanco

      2. 1. | | VV 

    mostrar subinstr (stritrim (“xx yy 11 22 33”), “”, “”,.)