Whitespace aus einem ganzen Datenrahmen in R entfernen

7

Ich habe versucht, den Leerraum zu entfernen, den ich in einem Datenrahmen (mit R) habe. Der Datenrahmen ist groß (& gt; 1 GB) und hat mehrere Spalten, die Leerraum in jedem Dateneintrag enthalten.

Gibt es eine schnelle Möglichkeit, den Leerraum aus dem gesamten Datenrahmen zu entfernen? Ich habe versucht, dies in einer Teilmenge der ersten 10 Datenzeilen mit Hilfe von:

zu tun %Vor%

Dies schien nicht zu funktionieren, obwohl R eine Ausgabe zurückgab, die ich nicht interpretieren konnte.

%Vor%

R hat 47 Warnungen zurückgegeben und den Leerraum nicht entfernt.

%Vor%

R gab einen Fehler mit der Fehlermeldung "Fehler: konnte die Funktion" erase_all "'

nicht finden

Ich würde wirklich etwas Hilfe dabei zu schätzen wissen, da ich die letzten 24 Stunden damit verbracht habe, dieses Problem anzugehen.

Danke!

    
Thirst for Knowledge 24.12.2013, 12:00
quelle

7 Antworten

12

Wenn ich Sie richtig verstanden habe, dann möchten Sie alle Leerzeichen aus dem gesamten Datenrahmen entfernen, ich denke, der Code, den Sie verwenden, ist gut zum Entfernen von Leerzeichen in den Spaltennamen. Ich denke, Sie sollten dies versuchen:

%Vor%

Ich hoffe, das funktioniert.

Dies wird eine Matrix zurückgeben, aber wenn Sie es in einen Datenrahmen ändern wollen, dann tun Sie:

%Vor%

BEARBEITEN 2017:

Die Verwendung von sapply und trimws function mit both=T kann führende und nachfolgende Leerzeichen entfernen, aber nicht darin. Da vom OP keine Eingabedaten bereitgestellt wurden, füge ich ein Dummy-Beispiel hinzu, um die Ergebnisse zu erzeugen.

%Vor%

Ausgabe :

%Vor%     
PKumar 24.12.2013, 12:13
quelle
5

Ich nehme Fremzy und den Kommentar von Stamper auf, das ist jetzt meine praktische Routine, um Leerzeichen in Daten zu bereinigen:

%Vor%

Wie andere bemerkt haben, ändert dies alle Typen in Zeichen. In meiner Arbeit ermittle ich zuerst die Typen, die im Original und den erforderlichen Konvertierungen verfügbar sind. Nach dem Trimmen trage ich die benötigten Typen erneut ein.

Wenn Ihre Originaltypen in Ordnung sind, wenden Sie die Lösung von MarkusN unter Ссылка

an

Diejenigen, die mit Excel-Dateien arbeiten, möchten vielleicht das readxl-Paket untersuchen, das beim Lesen standardmäßig auf trim_ws = TRUE gesetzt wird.

    
quelle
3

R ist einfach nicht das richtige Werkzeug für eine solche Dateigröße. Allerdings haben 2 Optionen:

Verwenden Sie ffdply und ff base

Verwenden Sie ff und ffbase Pakete:

%Vor%

Benutze sed (meine Präferenz)

%Vor%     
agstudy 24.12.2013 16:39
quelle
3

Ich nahm Fremzy und Mielniczuk auf und kam zu folgender Lösung:

%Vor%

Es funktioniert für gemischte numerische / Charactert Datenrahmen manipuliert nur Zeichenspalten.

    
MarkusN 14.06.2016 14:45
quelle
2

Sie könnten die Trimws-Funktion in R 3.2 für alle Spalten verwenden.

myData[,c(1)]=trimws(myData[,c(1)])

Sie können dies für alle Spalten in Ihrer Datenmenge wiederholen. Es hat auch gute Leistung mit großen Datensätzen.

    
Fremzy 08.11.2015 06:32
quelle
1
___ qstnhdr ___ Whitespace aus einem ganzen Datenrahmen in R entfernen ___ answer35945385 ___

Ich nehme Fremzy und den Kommentar von Stamper auf, das ist jetzt meine praktische Routine, um Leerzeichen in Daten zu bereinigen:

%Vor%

Wie andere bemerkt haben, ändert dies alle Typen in Zeichen. In meiner Arbeit ermittle ich zuerst die Typen, die im Original und den erforderlichen Konvertierungen verfügbar sind. Nach dem Trimmen trage ich die benötigten Typen erneut ein.

Wenn Ihre Originaltypen in Ordnung sind, wenden Sie die Lösung von MarkusN unter Ссылка

an

Diejenigen, die mit Excel-Dateien arbeiten, möchten vielleicht das readxl-Paket untersuchen, das beim Lesen standardmäßig auf trim_ws = TRUE gesetzt wird.

    
___ answer20760767 ___

Wenn ich Sie richtig verstanden habe, dann möchten Sie alle Leerzeichen aus dem gesamten Datenrahmen entfernen, ich denke, der Code, den Sie verwenden, ist gut zum Entfernen von Leerzeichen in den Spaltennamen. Ich denke, Sie sollten dies versuchen:

%Vor%

Ich hoffe, das funktioniert.

Dies wird eine Matrix zurückgeben, aber wenn Sie es in einen Datenrahmen ändern wollen, dann tun Sie:

%Vor%

BEARBEITEN 2017:

Die Verwendung von data.table und set function mit data.table kann führende und nachfolgende Leerzeichen entfernen, aber nicht darin. Da vom OP keine Eingabedaten bereitgestellt wurden, füge ich ein Dummy-Beispiel hinzu, um die Ergebnisse zu erzeugen.

%Vor%

Ausgabe :

%Vor%     
___ answer37815274 ___

Ich nahm Fremzy und Mielniczuk auf und kam zu folgender Lösung:

%Vor%

Es funktioniert für gemischte numerische / Charactert Datenrahmen manipuliert nur Zeichenspalten.

    
___ qstntxt ___

Ich habe versucht, den Leerraum zu entfernen, den ich in einem Datenrahmen (mit R) habe. Der Datenrahmen ist groß (& gt; 1 GB) und hat mehrere Spalten, die Leerraum in jedem Dateneintrag enthalten.

Gibt es eine schnelle Möglichkeit, den Leerraum aus dem gesamten Datenrahmen zu entfernen? Ich habe versucht, dies in einer Teilmenge der ersten 10 Datenzeilen mit Hilfe von:

zu tun %Vor%

Dies schien nicht zu funktionieren, obwohl R eine Ausgabe zurückgab, die ich nicht interpretieren konnte.

%Vor%

R hat 47 Warnungen zurückgegeben und den Leerraum nicht entfernt.

%Vor%

R gab einen Fehler mit der Fehlermeldung "Fehler: konnte die Funktion" erase_all "'

nicht finden

Ich würde wirklich etwas Hilfe dabei zu schätzen wissen, da ich die letzten 24 Stunden damit verbracht habe, dieses Problem anzugehen.

Danke!

    
___ answer33591389 ___

Sie könnten die Trimws-Funktion in R 3.2 für alle Spalten verwenden.

%code%

Sie können dies für alle Spalten in Ihrer Datenmenge wiederholen. Es hat auch gute Leistung mit großen Datensätzen.

    
___ answer36439573 ___

Wenn Sie die Variablenklassen in Ihrem %code% beibehalten möchten, sollten Sie wissen, dass die Verwendung von %code% sie überflüssig macht, weil sie %code% ausgibt, wobei alle Variablen in %code% oder %code% konvertiert werden. Basierend auf dem Code von Fremzy und Anthony Simon Mielniczuk können Sie die Spalten Ihres data.frames durchlaufen und den Leerraum nur von Spalten der Klasse %code% oder %code% abschneiden (und Ihre Datenklassen beibehalten):

%Vor%     
___ antwort43821211 ___

Wenn Sie mit großen Datenmengen wie dieser arbeiten, könnten Sie wirklich von der Geschwindigkeit von %code% profitieren.

%Vor%

Ich würde erwarten, dass dies die schnellste Lösung ist. Diese Codezeile verwendet den %code% -Operator von %code% , der sehr schnell über Spalten springt. Es gibt eine schöne Erklärung hier: Schnelles Looping mit set .

    
___ tag123replace ___ Ersetzen ist die Aktion, die eine Zeichenfolge nach einer Unterzeichenfolge durchsucht und sie durch eine andere Zeichenfolge ersetzt. ___ tag123r ___ R ist eine freie, quelloffene Programmiersprache und Softwareumgebung für statistische Berechnungen, Bioinformatik, Visualisierung und allgemeine Datenverarbeitung. Stellen Sie minimale, reproduzierbare, repräsentative Beispiele für Ihre Fragen bereit. Verwenden Sie dput () für Daten und geben Sie alle Nicht-Basis-Pakete mit Bibliotheksaufrufen an. Bilder für Daten oder Code nicht einbetten, eingerückte Codeblöcke verwenden. Verwenden Sie für statistische Fragen http://stats.stackexchange.com. ___ tag123whitespace ___ Whitespace oder Leerraum wird oft verwendet, um auf eine beliebige Kombination von Leerzeichen, Tabulatoren und neuen Zeilen zu verweisen, die zwischen Text horizontal oder vertikal Leerräume erzeugen. ___ answer20764097 ___

R ist einfach nicht das richtige Werkzeug für eine solche Dateigröße. Allerdings haben 2 Optionen:

Verwenden Sie ffdply und ff base

Verwenden Sie %code% und %code% Pakete:

%Vor%

Benutze sed (meine Präferenz)

%Vor%     
___ tag123gsub ___ Ruby, Lua, R und Awk Methoden zur Durchführung einer globalen Musterersetzung. ___
rafa.pereira 06.05.2017 13:48
quelle
0

Wenn Sie die Variablenklassen in Ihrem data.frame beibehalten möchten, sollten Sie wissen, dass die Verwendung von apply sie überflüssig macht, weil sie matrix ausgibt, wobei alle Variablen in character oder numeric konvertiert werden. Basierend auf dem Code von Fremzy und Anthony Simon Mielniczuk können Sie die Spalten Ihres data.frames durchlaufen und den Leerraum nur von Spalten der Klasse factor oder character abschneiden (und Ihre Datenklassen beibehalten):

%Vor%     
r3robertson 06.04.2016 00:50
quelle

Tags und Links