2013-11-24 20 views
5

Mam plik CSV 3 GB. Jest zbyt duży, aby załadować go do R na moim komputerze. Zamiast tego chciałbym załadować próbkę wierszy (powiedzmy 1000) bez ładowania pełnego zestawu danych.Próbka pliku CSV zbyt duża, aby załadować do R?

Czy to możliwe? Nigdzie nie mogę znaleźć odpowiedzi.

+6

Zobacz przykład 6e na stronie głównej sqldf: http://sqldf.googlecode.com dla rozwiązania jednoliniowego. –

+0

@ G.Grothendieck: Sądząc po moim menedżerze zadań cały plik jest ładowany do pamięci RAM – Raffael

+0

Tak, myślałem o tym, jak to może działać w R. Chcę tylko powiedzieć R do selektywnego read.csv niektórych wierszy plik csv. – Anton

Odpowiedz

7

Jeśli nie chcesz płacić tysięcy dolarów za Revolution R, abyś mógł załadować/przeanalizować swoje dane za jednym razem, wcześniej czy później, musisz znaleźć sposób na próbkowanie danych.

I etapem jest łatwiejsze stało poza R.

(1) Linux Shell:

Zakładając, że dane wpada spójnym formacie. Każdy wiersz to jeden rekord. Można to zrobić:

sort -R data | head -n 1000 >data.sample 

This losowo rodzaj wszystkie wiersze i uzyskać pierwsze 1000 wierszy w osobnym pliku - data.sample

(2) Jeśli dane nie są wystarczająco małe, aby zmieścić się w pamięci .

Istnieje również rozwiązanie do korzystania z bazy danych do przechowywania danych. Na przykład mam wiele tabel przechowywanych w bazie danych MySQL w pięknym formacie tabelarycznym. Mogę zrobić próbkę wykonując:

select * from tablename order by rand() limit 1000 

można łatwo komunikować się między MySQL i R używając RMySQL i można Indeks swoją kolumnę w celu zagwarantowania szybkości zapytań. Możesz także zweryfikować średnią lub standardową odchyłkę całego zestawu danych w porównaniu z próbką, jeśli chcesz wziąć pod uwagę moc bazy danych.

Są to dwa najpowszechniej stosowane sposoby oparte na moim doświadczeniu w radzeniu sobie z "dużymi" danymi.

+0

+1 za ogólny pomysł, ale nie wiem, jaka wersja "sort", której używasz ma opcję '-R'. – flodel

+0

@flodel http://stackoverflow.com/questions/886237/how-can-i-randomize-the-lines-in-a-file-using-a-standard-tools-on-redhat-linux –

+1

@fodel to to kod bashowy, a nie R. –

Powiązane problemy