Antworten:
Im Allgemeinen möchten wir eine Lösung, die vektorisiert ist. Hier ist ein besseres Testbeispiel:
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
Ersetzt alle Instanzen einer Zeichenfolge ( fixed = TRUE
) oder eines regulären Ausdrucks ( fixed = FALSE
Standardeinstellung) durch eine andere Zeichenfolge. 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 dies in diesem Fall fixed = TRUE
nicht erforderlich, bietet jedoch eine etwas bessere Leistung, da das Abgleichen einer festen Zeichenfolge schneller ist als das Abgleichen eines regulären Ausdrucks.
Wenn Sie alle Arten von Leerzeichen entfernen 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 Gruppe mit regulären Ausdrücken, die allen Leerzeichen entspricht. \s
ist ein sprachunabhängiger regulärer Ausdruck, der dasselbe tut.
stringr
Ansatz: str_replace_all
undstr_trim
stringr
bietet besser lesbare Wrapper für die Basis-R-Funktionen (obwohl ab Dezember 2014 in der Entwicklungsversion ein Zweig aufgebaut ist, der auf dem stringi
unten genannten basiert). Die Entsprechungen der obigen Befehle unter Verwendung von [ str_replace_all][3]
sind:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
hat auch eine str_trim
Funktion, die nur führende und nachfolgende Leerzeichen entfernt.
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
Ansatz: stri_replace_all_charclass
undstri_trim
stringi
basiert auf der plattformunabhängigen ICU-Bibliothek und verfügt über umfangreiche Funktionen zur Manipulation von Zeichenfolgen. Die Äquivalente der oben genannten sind:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Hier "\\p{WHITE_SPACE}"
ist eine alternative Syntax für den Satz von Unicode - Codepunkten betrachtet Leerzeichen zu sein, entspricht "[[:space:]]"
, "\\s"
und space()
. Für komplexere Ersetzungen regulärer Ausdrücke gibt es auch stri_replace_all_regex
.
stringi
hat auch Trimmfunktionen .
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:]]"
und "\\s"
?
Ich habe gerade etwas über das "stringr" -Paket gelernt, um Leerzeichen am Anfang und Ende eines Strings mit str_trim (, side = "both") zu entfernen, aber es hat auch eine Ersetzungsfunktion, so dass:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Bitte beachten Sie, dass die oben beschriebenen Lösungen nur Leerzeichen entfernen. Wenn Sie auch Tabulatoren oder neue Zeilen entfernen möchten, verwenden Sie diese stri_replace_all_charclass
aus dem stringi
Paket.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
Paket ist jetzt auf CRAN, viel Spaß! :)
stringi
ich es nun einige Monate lang verwendet habe und gesehen / gelernt habe, wie leistungsfähig und effizient es ist, ist es zu meinem bevorzugten Paket für String-Operationen geworden. Ihr habt einen tollen Job gemacht.
Verwenden Sie [[:blank:]]
diese Option, um alle Arten von horizontalen Leerzeichen abzugleichen.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
Die Funktion str_squish()
aus dem Paket stringr
von tidyverse macht 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
a b
<chr> <chr>
1 aZe aze s 12 12
2 wxc s aze 34e e4
str_squish
entfernt nicht alle Leerzeichen. Es werden nur mehrere Leerzeichen für ein Leerzeichen abgeschnitten und ersetzt.
Auf diese Weise können Sie alle Leerzeichen aus allen Zeichenvariablen in Ihrem Datenrahmen entfernen. Wenn Sie nur einige der Variablen auswählen möchten, verwenden Sie mutate
oder 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)
In der stringr-Bibliothek können Sie Folgendes versuchen:
Füllrohling entfernen
Bibliothek (stringr)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")