Потеря столбца данных при импорте большого файла csv с помощью read_csv

#r #import #readr

#r #импорт #readr

Вопрос:

Я импортирую csv-файл объемом 2,2 ГБ с 24 миллионами строк, используя read_csv(). Один из столбцов (vital sign_date_time), символьная переменная, не считывается и импортируется только со значениями NA.

Я открыл файл .csv на SQLServer и могу подтвердить, что данные есть в файле. Я разбил большой файл на более мелкие фрагменты в терминале macOS. Когда я импортирую файлы меньшего размера, снова с помощью read_csv(), данные также присутствуют.

Я использую диалоговое окно импорта в RStudio, чтобы свести к минимуму любые опечатки. В разделе просмотра данных диалогового окна отображаются только данные NA в рассматриваемом столбце, и он пытается импортировать столбец как логическое поле. Я попытался вручную изменить это на символьный тип, и он по-прежнему считывает только значения NA.

Вот скриншот диалогового окна:

снимок экрана диалогового окна

Есть идеи о том, что может происходить?

Спасибо.

Береги себя, Джефф

Комментарии:

1.У вас такая же проблема с использованием data.table data.table::fread() и / или vroom vroom::vroom() ?

2. получаете ли вы какие-либо предупреждения после импорта файла?

3. Я не пробовал vroom(), но у меня была такая же проблема с fread().

4. Я получаю кучу ошибок (84 миллиона / 24 миллиона строк, но все они имеют дело с другим столбцом, который, как известно, отсутствует во многих строках).

5. @jared_mamrot Спасибо за предложение!!! fread как будто взорвался / истек тайм-аут read_csv , но vroom сработал как по волшебству. Удивительно, что одна функция работает, а другая нет. Я также думал, что vroom это должно было быть включено read_csv сейчас.

Ответ №1:

Недавно я столкнулся с аналогичной проблемой, так что это предположение, основанное на этом опыте.

По умолчанию, если 1000 первых записей столбца равны NA , readr::read_csv все значения этого столбца автоматически устанавливаются NA равными . Вы можете управлять этим, задав guess_max аргумент. Вот документация:

 guess_max: Maximum number of records to use for guessing column types.
  

Например,

 library(readr)
dat <- read_csv("file.csv", guess_max=100000)
  

Комментарии:

1. Винсент, ты попал в точку! Это была проблема. Первые 399 тыс. строк были нулевыми. После настройки guess_max на 400 КБ он работал как чемпион! Спасибо!