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

Posted

技术标签:

【中文标题】从 R 中的大型 .CSV 导入和提取随机样本【英文标题】:Importing and extracting a random sample from a large .CSV in R 【发布时间】:2015-03-14 21:50:54 【问题描述】:

我在 R 中进行一些分析,需要处理一些大型数据集(10-20GB,存储在 .csv 中,并使用 read.csv 函数)。

由于我还需要将大型 .csv 文件与其他数据帧进行合并和转换,因此我没有计算能力或内存来导入整个文件。

我想知道是否有人知道导入随机百分比的 csv 的方法。

我看到了一些示例,其中人们导入了整个文件,然后使用单独的函数创建另一个数据框,该数据框是原始样本的示例,但我希望能做一些不那么密集的事情。

【问题讨论】:

我认为您应该将数据放入数据库中。 This answer 可能有用。 我同时使用 Mac (Yosemite) 和 PC (Windows 7) 一种选择可能是使用像awk 这样的unix 命令行工具,这里有一个很好的讨论:***.com/questions/692312/… 一旦你使用awk 采样,然后读入R。跨度> 【参考方案1】:

我认为没有一个好的R工具可以随机读取文件(也许可以是扩展名read.tablefread(data.table package))。

使用perl,您可以轻松完成这项任务。例如,要以随机方式读取文件的 1%,您可以这样做:

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

在这里,我使用 system 从 R 调用它。 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() &lt; 0.04)' train.csv' had status 255

以上是关于从 R 中的大型 .CSV 导入和提取随机样本的主要内容,如果未能解决你的问题,请参考以下文章

将大 csv 文件中的小随机样本加载到 R 数据框中

如何将 GCS 中的 csv 随机样本导出到 BigQuery

从 csv 文件生成随机样本,同时跳过具有某些值的行

如何在 python 中的大型数据集上训练随机森林?

加载csv文件s3 pyspark的随机样本

提取 CSV 文件中的随机曲目列表