2013-11-24 47 views
5

我有一個3GB的csv文件。在我的電腦上加載到R太大了。相反,我想在不加載完整數據集的情況下加載行(例如1000)的樣本。樣品CSV文件太大,無法載入R?

這可能嗎?我似乎無法在任何地方找到答案。

+6

請參閱sqldf主頁上的示例6e:http://sqldf.googlecode.com以獲得單線解決方案。 –

+0

@ G.Grothendieck:從我的任務管理器判斷整個文件被加載到內存中 – Raffael

+0

是的,我一直在想如何在R中工作。我想要告訴R有選擇性地read.csv某些行csv文件。 – Anton

回答

7

如果您不想向Revolution R支付數千美元,以便您可以一次加載/分析您的數據,遲早需要找出一種方法來採樣數據。

這一步是比較容易出現R.

(1)提供的Linux Shell:

假設你的數據落入一致的格式。每一行都是一條記錄。你可以這樣做:

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

這會隨機排序的所有行,並獲得第1000行到一個單獨的文件 - data.sample

(2)如果數據是沒有小到足以放入內存。

還有一個使用數據庫來存儲數據的解決方案。例如,我有許多表以美麗的表格格式存儲在MySQL數據庫中。我可以通過做做一個樣本:

select * from tablename order by rand() limit 1000 

您可以MySQL和R的使用RMySQL容易溝通,你可以索引你的專欄,以保證查詢速度。如果要考慮數據庫的強大功能,您還可以驗證整個數據集與您的樣本的平均值或標準偏差。

根據我處理'大'數據的經驗,這是兩種最常用的方法。

+0

對於整體想法+1,但我不知道你使用'sort'的哪個版本具有'-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

@ flodel it是bash代碼,而不是R代碼。 –