Есть ли встроенная функция для выборки большого набора данных с разделителями? - PullRequest
3 голосов
/ 27 августа 2011

У меня есть несколько больших файлов данных, которые я хотел бы попробовать при загрузке в R. Я могу загрузить весь набор данных, но он действительно слишком большой для работы. sample делает примерно правильные вещи, но я хотел бы взять случайные выборки входных данных во время чтения.

Я могу представить, как построить это с помощью цикла и readline, и что-нет, но, конечно, это было сделано сотни раз.

Есть ли что-то в CRAN или даже в базе, которая может это сделать?

Ответы [ 3 ]

4 голосов
/ 27 августа 2011

Вы можете сделать это в одной строке кода, используя sqldf.См. Часть 6e , пример 6 на домашней странице sqldf .

2 голосов
/ 27 августа 2011

Нет готовых объектов. Лучшим подходом было бы использовать программу управления базой данных. (Похоже, что это было рассмотрено в SO или Rhelp на прошлой неделе.)

Взгляните на: Прочитайте csv из определенной строки и особенно обратите внимание на комментарии Гротендика. Я считаю его "волшебником класса А". Он получил личный опыт работы с sqldf. (Автор IIRC.)

И еще одна проблема «огромных файлов» с решением Grothendieck, которая оказалась успешной: R: как связать два огромных фрейма данных без нехватки памяти

0 голосов
/ 02 сентября 2011

Я написал следующую функцию, которая закрывает до того, что я хочу:

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 или аналогичного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...