423 Stimmen

Wie kann ich vor- und nachlaufenden Leerraum abschneiden?

Ich habe einige Probleme mit führenden und nachgestellten Leerzeichen in einem data.frame.

Ich schaue mir zum Beispiel eine bestimmte row in einem data.frame auf der Grundlage einer bestimmten Bedingung:

> myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)] 

[1] codeHelper     country        dummyLI    dummyLMI       dummyUMI       

[6] dummyHInonOECD dummyHIOECD    dummyOECD      

<0 rows> (or 0-length row.names)

Ich habe mich gefragt, warum ich nicht die erwartete Ausgabe erhalte, da das Land Österreich in meiner Datenbank offensichtlich existiert. data.frame . Nachdem ich meinen Codeverlauf durchgesehen und versucht hatte, herauszufinden, was falsch gelaufen war, versuchte ich es:

> myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)]
   codeHelper  country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD
18        AUT Austria        0        0        0              0           1
   dummyOECD
18         1

Alles, was ich in dem Befehl geändert habe, ist ein zusätzliches Leerzeichen nach Austria.

Es entstehen natürlich weitere lästige Probleme. Zum Beispiel, wenn ich zwei Rahmen auf der Basis der Länderspalte zusammenführen möchte. Einer data.frame verwendet "Austria " während der andere Rahmen "Austria" . Der Abgleich klappt nicht.

  1. Gibt es eine gute Möglichkeit, den Leerraum auf dem Bildschirm anzuzeigen, so dass ich mir des Problems bewusst bin?
  2. Und kann ich in R das führende und das nachgestellte Leerzeichen entfernen?

Bislang habe ich ein einfaches Perl Skript, das die weißen Stellen entfernt, aber es wäre schön, wenn ich das irgendwie in R machen könnte.

618voto

wligtenberg Punkte 7325

Ab R 3.2.0 wurde eine neue Funktion zum Entfernen von führenden/nachlaufenden Leerzeichen eingeführt:

trimws()

Siehe: Führenden/nachlaufenden Leerraum entfernen

490voto

f3lix Punkte 28602

Wahrscheinlich ist es am besten, die Leerzeichen am Ende der Datei zu behandeln, wenn Sie Ihre Daten lesen. Wenn Sie read.csv o read.table können Sie den Parameter strip.white=TRUE .

Wenn Sie die Zeichenketten anschließend bereinigen möchten, können Sie eine dieser Funktionen verwenden:

# Returns string without leading white space
trim.leading <- function (x)  sub("^\\s+", "", x)

# Returns string without trailing white space
trim.trailing <- function (x) sub("\\s+$", "", x)

# Returns string without leading or trailing white space
trim <- function (x) gsub("^\\s+|\\s+$", "", x)

Um eine dieser Funktionen zu verwenden myDummy$country :

 myDummy$country <- trim(myDummy$country)

Um den weißen Raum zu "zeigen", könnte man ihn verwenden:

 paste(myDummy$country)

der Ihnen die von Anführungszeichen (") umgebenen Zeichenfolgen anzeigt, wodurch Leerzeichen leichter zu erkennen sind.

97voto

userJT Punkte 10348

Um den Leerraum zu manipulieren, verwenden Sie str_trim() aus dem stringr-Paket. Das Paket hat ein Handbuch vom 15. Februar 2013 und befindet sich in CRAN . Die Funktion kann auch String-Vektoren verarbeiten.

install.packages("stringr", dependencies=TRUE)
require(stringr)
example(str_trim)
d4$clean2<-str_trim(d4$V2)

(Kredit geht an den Kommentator: R. Cotton)

28voto

Bernhard Kausler Punkte 4988

Eine einfache Funktion um führende und nachgestellte Leerzeichen zu entfernen:

trim <- function( x ) {
  gsub("(^[[:space:]]+|[[:space:]]+$)", "", x)
}

Verwendung:

> text = "   foo bar  baz 3 "
> trim(text)
[1] "foo bar  baz 3"

13voto

Marek Punkte 47395

Ad 1) Um Leerräume zu sehen, könnten Sie direkt aufrufen print.data.frame mit geänderten Argumenten:

print(head(iris), quote=TRUE)
#   Sepal.Length Sepal.Width Petal.Length Petal.Width  Species
# 1        "5.1"       "3.5"        "1.4"       "0.2" "setosa"
# 2        "4.9"       "3.0"        "1.4"       "0.2" "setosa"
# 3        "4.7"       "3.2"        "1.3"       "0.2" "setosa"
# 4        "4.6"       "3.1"        "1.5"       "0.2" "setosa"
# 5        "5.0"       "3.6"        "1.4"       "0.2" "setosa"
# 6        "5.4"       "3.9"        "1.7"       "0.4" "setosa"

Siehe auch ?print.data.frame für andere Optionen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X