是否有用于对大分隔数据集进行采样的内置函数?

时间:2011-08-27 02:32:02

标签: r

我有一些大数据文件,我想在加载到R时进行采样。我可以加载整个数据集,但它真的太大了,无法使用。 sample做的大概是正确的,但我想在阅读时随机抽取输入样本。

我可以想象如何使用循环和readline构建它以及什么 - 但是肯定已经完成了数百次。

CRAN或甚至基地都能做到这一点吗?

3 个答案:

答案 0 :(得分:4)

您可以使用sqldf在一行代码中执行此操作。请参阅example 6sqldf 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或类似的连接包装它。