2015-01-16 52 views
4

從大.CSV提取隨機抽樣我做R中的一些分析,我需要一些大型數據集(10-20GB,存儲爲.csv工作,並使用read.csv功能)。導入和R中

正如我還需要合併,與其他數據幀變換大的.csv文件,我不具備的計算能力或存儲導入整個文件。

我不知道是否有人的方式導入CSV的隨機百分比知道。

我見過一些例子,其中人已經進口了整個文件,然後使用一個單獨的函數來創建另一個數據幀,它是原始的樣品,但我希望的東西有點不太密集。

+3

我覺得你應該把你的數據在數據庫中。 [這個答案](http://stackoverflow.com/a/1820610/1412059)可能會有用。 – Roland

+0

我同時使用的是Mac(優勝美地)和PC(Windows 7)中 – RMAkh

+0

一個選擇可能是使用UNIX命令行工具,如'awk',還有這裏有一個很好的討論:http://stackoverflow.com/questions/692312 /隨機選擇從一個文件中剔除它不會使用-sun -with-unix一旦你用'awk'抽樣,然後讀入R. – Statwonk

回答

6

我認爲沒有一個好的R工具以隨機的方式讀取文件(也許它可以是擴展read.tablefread(data.table包))。

使用perl您可以輕鬆地做這個任務。例如,讀取一個隨機的方式文件的1%,你可以這樣做:

xx= system(paste("perl -ne 'print if (rand() < .01)'",big_file),intern=TRUE) 

在這裏,我來自R使用system調用它。 xx現在只包含1%的文件。

你可以用這一切的功能:

read_partial_rand <- 
    function(big_file,percent){ 
    cmd <- paste0("perl -ne 'print if (rand() < ",percent,")'") 
    cmd <- paste(cmd,big_file) 
    system(cmd,intern=TRUE) 
    } 
+0

'正在運行的命令'perl -ne'print if(rand ()<0.04)'train.csv'的狀態爲255' –