2016-10-28 3 views
0

Ich habe eine große Datei (data.txt, 35 GB), die 3 Spalten hat. Einige Beispiele Teil der Datei wie folgt aussehen würde:Lesen Sie nur Zeilen aus einer großen Textdatei, die bestimmte Bedingung erfüllen

... ... ... 
5 701565 8679.56 
8 1.16201e+006 3193.18 
1 1.16173e+006 4457.85 
14 1.16173e+006 4457.85 
9 1.77942e+006 7208.73 
4 1.78011e+006 8239.88 
14 1.78019e+006 8195.57 
9 2.00206e+006 8858.55 
4 2.00199e+006 7924 
... ... ... 

ich ein Histogramm für die 3. Spalte dargestellt werden soll, wenn die Werte in der zweiten Spalte zwischen 0 und 50'000 sind.

Dann möchte ich ein anderes Histogramm machen, wo die Werte der ersten Spalte zwischen 50'000 und 100'000 liegen. Und so weiter und so fort.

Ich weiß nicht, wie ich nur die Daten laden/lesen, die ich auf einmal brauche. Jede Hilfe wäre willkommen!

Wenn ich das Sqldf-Paket verwenden sollte, dann wäre die Frage, die ich habe, wie ich sagen kann, dass der Wert der 2. Spalte kleiner sein sollte als ein z. 50'000?

Der Unterschied zu How do i read only lines that fulfil a condition from a csv into R? ist, dass ich keine Spaltennamen habe. Deshalb kann ich nicht tun, was sie in ihrer Lösung vorschlagen:

sql = "select * from Datei, in Sepal.Length> 5"

+0

angepasst Vielleicht können Sie das 'sqldf' Paket dafür verwenden. Siehe [diese Suchergebnisse] (http://stackoverflow.com/search?q=%5Br%5D+filter+sqldf+where) für etwas Inspiration. – Jaap

+0

Ich habe keinen Spaltennamen. Deshalb weiß ich nicht, wie man sqldf zur Untermenge benutzt? – Fabi

+0

Haben Sie darüber nachgedacht, nur die Spalten in der CSV-Datei zu benennen? Die Struktur eines CSV ist ziemlich einfach und Sie können wahrscheinlich nur Notepad ++ ... – JonGrub

Antwort

0

I neuere Versionen von readr unterstützt diese Art der Sache denken. Folgendes wurde nur aus der Hilfe für readr::read_csv_chunked

library(readr) 

f <- function(x, pos) subset(x, X3 > 0 & X3 < 50000) 
df <- read_csv_chunked(
    'test.csv', 
    DataFrameCallback$new(f), 
    chunk_size = 100000, 
    col_names = F 
) 
Verwandte Themen