Обработка больших наборов данных в R
Я работаю с относительно большими наборами данных (5 файлов по 2 ГБ каждый, чтобы дать вам порядок, одна из таблиц имеет размер 1,5M строк x 270 столбцов), где я использую функцию dplyr left_joint (между этими наборами данных и другими небольшими таблицами). Таблицы содержат строковые данные, которые я не хочу потерять. Однако использование пакетов, которые обрабатывают большие наборы данных (например, bigmemory или ff), преобразует строку в факторы, а затем в числа, что означает потерю данных. Есть ли способ манипулировать этими файлами (с моими 8 ГБ ОЗУ) без потери информации?
2 ответа
Я не понимаю, когда вы говорите, что информация теряется при использовании факторов. Например, скажем, что str
является одним из вашего строкового столбца, вы можете сделать
str <- sample(sample(letters, replace = TRUE),
size = 1.5e6, replace = TRUE)
tab.str <- sort(unique(str)) # could use `letters` as lookup table
str.int <- match(str, tab.str)
all.equal(tab.str[str.int], str)
Итак, в основном у вас есть целые числа, которые являются индексами таблицы поиска, чтобы вернуть ваши строки.
Однако, если вы используете формат big.matrix, вы не сможете использовать dplyr, но я думаю, что было бы относительно легко переопределить левое соединение для вашего конкретного случая.
Изучите Data.tables для любого вида обработки на R с большими наборами данных. Скорость и эффективность не имеют аналогов по сравнению с любым другим пакетом обработки данных на R.