Способы читают только выберите столбцы из файла в R? (Счастливая среда между `read.table` и` сканировать?) [Дубликат
-
25-09-2019 - |
Вопрос
Этот вопрос уже имеет ответ здесь:
- Только читайте выбранные столбцы 3 ответа
У меня есть некоторые очень большие файлы данных с разграниченными данными и Я хочу обрабатывать только определенные столбцы в R не принимая время и память, чтобы создать data.frame
для всего файла.
Единственные варианты, которые я знаю, read.table
что очень расточительно, когда я хочу только пару колонн или scan
который кажется слишком низким уровнем для того, что я хочу.
Есть ли лучший вариант, либо с чистым r, либо, возможно, вызывает какое-то другой скрипт оболочки, чтобы сделать извлечение столбца, а затем, используя сканирование или чтение. (Что приводит к вопросу, как вызвать сценарий оболочки и захватить его вывод в R?).
Решение
Иногда я делаю что-то вроде этого, когда у меня есть данные в файле разделите вкладку:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
Это давайте cut
Делайте выбор данных, которые он может сделать, не используя много памяти вообще.
Видеть Читайте только ограниченное количество столбцов Для Pure R версию, используя "NULL"
в colClasses
аргумент read.table
.
Другие советы
Одна возможность использовать pipe()
вместо имени файла и иметь awk
Или подобные фильтры извлекают только столбцы, которые вы хотите.
Видеть help(connection)
для дальше pipe
и друзья.
Редактировать: read.table()
Может также сделать это для вас, если вы очень явны о Colclasses - значение NULL для данного столбца пропускает столбец AllTogether. Видеть help(read.table)
. Отказ Таким образом, у нас есть решение в базе R без дополнительных пакетов или инструментов.
Я думаю, что подход Дирк прямо вперед, а также быстро. Альтернатива, которую я использовал, - это загрузить данные в SQLite, которая загружает гораздо быстрее, чем Read.table (), а затем вытащить только то, что вы хотите. Пакет SQLDF () делает это все довольно легко. Вот ссылка к предыдущему переполнению стека, который дает образцы кода для SQLDF ().
Это, вероятно, больше, чем вам нужно, но если вы работаете на очень большой Наборы данных, тогда вы также сможете посмотреть на Пакет HadoopStreaming. который обеспечивает уменьшенную карту рутину, используя Гадость.