从 R 中的大型 .CSV 导入和提取随机样本
Importing and extracting a random sample from a large .CSV in R
我在 R 中做一些分析,我需要处理一些大型数据集(10-20GB,存储在 .csv 中,并使用 read.csv 函数)。
由于我还需要将大型 .csv 文件与其他数据框合并和转换,因此我没有计算能力或内存来导入整个文件。
我想知道是否有人知道导入随机百分比的 csv 的方法。
我见过一些示例,其中人们导入了整个文件,然后使用单独的函数创建了另一个数据框,该数据框是原始样本的样本,但是我希望得到的东西不那么密集。
我认为没有一个好的R工具可以随机读取文件(也许它可以是扩展read.table
或fread
(data.table包) .
使用 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)
}
我在 R 中做一些分析,我需要处理一些大型数据集(10-20GB,存储在 .csv 中,并使用 read.csv 函数)。
由于我还需要将大型 .csv 文件与其他数据框合并和转换,因此我没有计算能力或内存来导入整个文件。
我想知道是否有人知道导入随机百分比的 csv 的方法。
我见过一些示例,其中人们导入了整个文件,然后使用单独的函数创建了另一个数据框,该数据框是原始样本的样本,但是我希望得到的东西不那么密集。
我认为没有一个好的R工具可以随机读取文件(也许它可以是扩展read.table
或fread
(data.table包) .
使用 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)
}