我有一些大数据文件,我想在加载到R时进行采样。我可以加载整个数据集,但它真的太大了,无法使用。 sample
做的大概是正确的,但我想在阅读时随机抽取输入样本。
我可以想象如何使用循环和readline构建它以及什么 - 但是肯定已经完成了数百次。
CRAN或甚至基地都能做到这一点吗?
答案 0 :(得分:4)
您可以使用sqldf在一行代码中执行此操作。请参阅example 6上sqldf home page的第6e部分。
答案 1 :(得分:2)
没有预先设施。最好的方法是使用数据库管理程序。 (似乎在上周SO或Rhelp都解决了这个问题。)
看一下:Read csv from specific row,特别注意格洛腾迪克的评论。我认为他是“A级wizaRd”。他有sqldf的第一手经验。 (作者IIRC。)
格罗腾迪克解决方案成功的另一个“巨大文件”问题: R: how to rbind two huge data-frames without running out of memory
答案 2 :(得分:0)
我写了以下函数,关闭到我想要的地方:
readBigBz2 <- function(fn, sample_size=1000) {
f <- bzfile(fn, "r")
rv <- c()
repeat {
lines <- readLines(f, sample_size)
if (length(lines) == 0) break
rv <- append(rv, sample(lines, 1))
}
close(f)
rv
}
我可能希望长期使用sqldf,但这是一种非常有效的文件采样方式。我只是不知道如何围绕read.csv或类似的连接包装它。