Wie entferne ich alle Leerzeichen aus einer Zeichenkette?

So wird " xx yy 11 22 33 " zu "xxyy112233" . Wie kann ich das erreichen?

Im Allgemeinen wollen wir eine Lösung, die vektorisiert ist, also hier ist ein besseres Testbeispiel:

 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 

Der Ansatz der Basis R: gsub

gsub ersetzt alle Instanzen eines Strings ( fixed = TRUE ) oder eines regulären Ausdrucks ( fixed = FALSE , der Standardwert) durch einen anderen String. Verwenden Sie zum Entfernen aller Leerzeichen:

 gsub(" ", "", x, fixed = TRUE) ## [1] "xy" "←→" ## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA 

Wie DWin feststellte, ist in diesem Fall fixed = TRUE nicht notwendig, bietet aber eine etwas bessere performance, da der Vergleich mit einer festen Zeichenkette schneller ist als die Übereinstimmung mit einem regulären Ausdruck.

Wenn Sie alle Arten von Leerzeichen löschen möchten, verwenden Sie:

 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:]" ist eine R-spezifische reguläre Ausdrucksgruppe, die mit allen Leerzeichen übereinstimmt. \s ist ein sprachunabhängiger regulärer Ausdruck, der dasselbe tut.


Der stringr Ansatz: str_replace_all und str_trim

stringr bietet mehr lesbare Wrapper um die Basis-R-functionen (obwohl die Entwicklungsversion ab Dezember 2014 einen Zweig auf stringi , der unten erwähnt wird). Die Äquivalente der obigen Befehle, die [ str_replace_all][3] , sind:

 library(stringr) str_replace_all(x, fixed(" "), "") str_replace_all(x, space(), "") 

stringr hat auch eine str_trim function, die nur führende und str_trim Leerzeichen str_trim .

 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 

Der stringi Ansatz: stri_replace_all_charclass und stri_trim

stringi basiert auf der plattformunabhängigen ICU-Bibliothek und verfügt über umfangreiche functionen zur String-Manipulation. Die Äquivalente der oben genannten sind:

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

Hier ist "\\p{WHITE_SPACE}" eine alternative Syntax für den Satz von Unicode-Codepunkten, die als Whitespace betrachtet werden, äquivalent zu "[[:space:]]" "\\p{WHITE_SPACE}" "[[:space:]]" , "\\s" und space() . Für komplexere Ersetzungen von regulären Ausdrücken gibt es auch stri_replace_all_regex .

stringi hat auch Trim-functionen .

 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 

Ich habe gerade über das “striperr” -Paket gelernt, um Leerzeichen mit str_trim (, side = “both”) vom Anfang und Ende eines Strings zu entfernen, aber es hat auch eine Ersatzfunktion, so dass:

 a < - " xx yy 11 22 33 " str_replace_all(string=a, pattern=" ", repl="") [1] "xxyy112233" 

Bitte beachten Sie, dass die oben geschriebenen Einträge nur Leerzeichen entfernen. Wenn Sie auch einen Tab oder eine neue Zeile entfernen möchten, verwenden Sie stri_replace_all_charclass aus dem stringi Paket.

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

Verwenden Sie [[:blank:]] , um beliebige horizontale while_space-Zeichen zu finden.

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

x = “xx yy 11 22 33”

gsub (“”, “”, x)

[1] “xxyy112233”

Die function str_squish() aus package stringr von tidyverse erledigt die Magie!

 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 

Versuche dies:

  1. Entfernen Sie aufeinanderfolgende Füllrohlinge
  2. Entfernen Sie das leere Feld.

      2. 1. | | VV 

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