2015-01-16 50 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' –