Importieren nur jeder N-ten Zeile aus einer .csv-Datei in R

8

nur eine kurze Frage. Gibt es eine Möglichkeit, read.csv zu verwenden, um jede N-te Zeile aus einer großen Datei zu importieren:

Beispiel, eine 50-60 Millionen Zeilen-Datei, bei der Sie nur jede vierte Zeile ab Zeile 2 benötigen.

Ich dachte darüber nach, vielleicht die "seq" -Funktion einzubauen, aber ich bin mir nicht sicher, ob das möglich ist.

Irgendwelche Vorschläge?

    
Tom A 19.02.2014, 20:35
quelle

4 Antworten

13

Für eine große Datendatei ist es die beste Option, unnötige Zeilen herauszufiltern, bevor sie in R importiert werden. Der einfachste Weg dazu ist mit Hilfe der OS-Befehle, wie sed, awk, grep usw. Der folgende Code liest jede vierte Zeile aus der Datei: zum Beispiel:

%Vor%     
df239 19.02.2014, 21:18
quelle
5
%Vor%

wird den Trick machen.

Dies funktioniert, da der logische Vektor wiederverwendet wird, bis er mit der Anzahl der Zeilen des Datenrahmens übereinstimmt, der von read.csv zurückgegeben wurde.

    
Sven Hohenstein 19.02.2014 20:40
quelle
3

Da @ df239 vorgeschlagen wurde, ist es viel besser, die Zeilen zuvor mit einem Befehlszeilen-Tool zu filtern.

Hier ist eine einfachere Version mit sed :

%Vor%

Der 2~4p sagt sed , um jede vierte Zeile ab Zeile 2 zu erhalten.

    
Scott Ritchie 19.02.2014 21:21
quelle
1

Sven hat eine großartige Antwort für mittelgroße Dateien gegeben. Aber wenn der Grund dafür ist, dass das Lesen der gesamten Datei nicht in den Speicher passt, müssen Sie einen anderen Ansatz wählen.

Es kann am einfachsten sein, ein externes Werkzeug wie Perl oder AWK zu verwenden, um die Datei nur mit den gewünschten Zeilen vorzuverarbeiten. Sie können pipe verwenden, um aus der Ausgabe eines anderen Programms zu lesen, so dass Sie nicht müssen Erstelle eine Zwischendatei.

Ein anderer Ansatz wäre, die Datei in eine Datenbank zu übertragen und dann nur die gewünschten Zeilen aus der Datenbank auszuwählen.

Sie können die Datei auch durchlaufen. Wenn Sie die Datei explizit öffnen, können Sie jeweils einige Zeilen gleichzeitig lesen, nur die gewünschten Zeilen beibehalten und dann den nächsten Abschnitt lesen, der an der Stelle beginnt, an der Sie aufgehört haben. Die Optionen zu read.csv , um Zeilen zu überspringen und die Anzahl der zu lesenden Zeilen zu begrenzen, wären hier hilfreich.

    
Greg Snow 19.02.2014 21:20
quelle

Tags und Links