Wege nur ausgewählte Spalten aus einer Datei in R zu lesen? (Ein Mittelweg zwischen `read.table` und` scan`?) [Duplikat]

StackOverflow https://stackoverflow.com/questions/2193742

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?).

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top