Wege nur ausgewählte Spalten aus einer Datei in R zu lesen? (Ein Mittelweg zwischen `read.table` und` scan`?) [Duplikat]
-
25-09-2019 - |
Frage
Diese Frage bereits eine Antwort hier:
- Nur ausgewählte Spalten lesen 3 Antworten
Ich habe einige sehr große abgegrenzte Datendateien und Ich möchte nur bestimmte Spalten in R verarbeiten , ohne die Zeit und Speicher nimmt einen data.frame
für die ganze Datei zu erstellen.
Die einzigen Optionen, die ich kenne sind read.table
, die sehr kostspielig ist, wenn ich nur ein paar Spalten oder scan
will, das für zu niedrigem Niveau scheint, was ich will.
Gibt es eine bessere Möglichkeit, entweder mit reiner R oder vielleicht zu einem anderen Shell-Skript rufe die Spalte Extraktion zu tun und dann unter Verwendung von Scan oder read.table auf seinen Ausgang? (Was zu der Frage, wie ein Shell-Skript aufrufen und seine Ausgabe in R erfassen?).
Lösung
Manchmal mache ich so etwas wie dieses, wenn ich die Daten in einer tabstoppgetrennte Datei haben:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
Das lässt cut
die Datenselektion tun, die es ohne viel Speicher überhaupt tun kann.
Siehe Nur begrenzte Anzahl von Spalten für reine R-Version mit "NULL"
im colClasses
Argumente read.table
lesen.
Andere Tipps
Eine Möglichkeit ist pipe()
anstelle der Dateinamen zu verwenden und haben awk
oder ähnliche Filter extrahieren nur die Spalten, die Sie wollen.
Siehe help(connection)
für mehr auf pipe
und Freunden.
Bearbeiten : read.table()
kann dies auch für Sie tun, wenn Sie sehr explizit über colClasses sind - einen Wert von NULL für eine bestimmte Spalte überspringt die Spalte alltogether. Siehe help(read.table)
. Also da haben wir eine Lösung, in der Basis R ohne zusätzliche Pakete oder Werkzeuge.
ich glaube, Dirks Ansatz geradlinig sowie schnell. Eine Alternative, die ich verwendet habe, ist es, die Daten in SQLite, welche Belastungen viel schneller als read.table () und ziehen Sie dann nur zu laden, was Sie wollen. das Paket sqldf () macht das alles ganz einfach. Hier ist ein Link zu einem früheren Stapelüberlauf Antwort, die Codebeispiele für sqldf gibt ().
Dies ist wahrscheinlich mehr, als Sie brauchen, aber wenn Sie Betrieb auf sehr groß Datensätze dann könnten Sie auch einen Blick auf das HadoopStreaming Paket , die eine Karten reduzieren Routine Hadoop .