Способы чтения только выбрать столбцы из файла в R? (Счастливая среда между `read.table` и` scan`?)
У меня есть очень большие файлы данных с разделителями и Я хочу обрабатывать только определенные столбцы в R, не занимая время и память, чтобы создать data.frame
для всего файла.
Единственными параметрами, которые я знаю, являются read.table
, которые очень расточительны, когда я хочу только пару столбцов или scan
, которые кажутся слишком низкими для того, что я хочу.
Есть ли лучший вариант, либо с чистым R, либо, возможно, вызывать какую-либо другую оболочку script, чтобы выполнить извлечение столбца, а затем используя scan или read.table на выходе? (Это приводит к вопросу о том, как вызвать оболочку script и записать ее вывод в R?).
Ответы
Ответ 1
Иногда я делаю что-то подобное, когда у меня есть данные в файле с разделителями табуляции:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
Это позволяет cut
делать выбор данных, что он может сделать, не используя много памяти.
[Неверная чистая версия R удалена] - см. Только чтение ограниченного количества столбцов для правильной чистой версии R, используя NULL в аргументе colClasses
до read.table
.
Ответ 2
Одной из возможностей является использование pipe()
вместо имени файла и awk
или аналогичные фильтры извлекать только нужные столбцы.
Подробнее см. help(connection)
для pipe
и друзей.
Изменить: read.table()
также может сделать это для вас, если вы очень явно о colClasses - значение NULL для данного столбца пропускает столбец alltogether. См. help(read.table)
. Итак, у нас есть решение в базе R без дополнительных пакетов или инструментов.
Ответ 3
Я думаю, что подход Дирка является прямым и быстрым. Альтернативой, которую я использовал, является загрузка данных в sqlite, который загружает MUCH быстрее, чем read.table(), а затем вытаскивает только то, что вы хотите. пакет sqldf() делает все это довольно просто. Здесь ссылка на предыдущий ответ, который дает примеры кода для sqldf().
Ответ 4
Существует пакет, colbycol, предназначенный для выполнения именно того, что вы ищете:
http://cran.r-project.org/web/packages/colbycol/index.html
Ответ 5
Это, вероятно, больше, чем вам нужно, но если вы работаете на очень больших наборах данных, вы также можете посмотреть пакет HadoopStreaming, который обеспечивает рутификацию с помощью Hadoop.