在R中从大型.CSV文件导入和提取随机样本

4
我正在使用R进行一些技术分析,需要处理一些大型数据集(10-20GB,存储在.csv文件中,并使用read.csv函数)。
由于我还需要将大型.csv文件与其他数据帧合并和转换,所以我没有计算能力或内存来导入整个文件。
我想知道是否有人知道一种导入csv随机百分比的方法。
我看到有些示例中,人们已经导入了整个文件,然后使用另一个函数创建了原始数据的样本数据帧,但我希望能够更简单的实现。

3
我认为你应该将你的数据存入数据库中。这个答案可能会有所帮助。 - Roland
我同时使用Mac(Yosemite)和PC(Windows 7)。 - RMAkh
一种选择可能是使用类似awk的Unix命令行工具,这里有一个很好的讨论:https://dev59.com/kXRB5IYBdhLWcg3wLk1M。一旦您使用`awk`进行抽样,则可以读入R中。 - Statwonk
1个回答

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)
  }

running command 'perl -ne 'print if (rand() < 0.04)' train.csv' had status 255 - Hack-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接