R data.table fread команда: как читать большие файлы с нерегулярными разделителями?

Мне приходится работать с коллекцией из 120 файлов размером ~ 2 ГБ (525600 строк x 302 столбца). Цель - собрать статистику и поместить результаты в чистую базу данных SQLite.

Все работает нормально, когда мой скрипт импортирует read.table (), но медленно. Итак, я попытался с fread, из пакета data.table (версия 1.9.2), но он дает мне эту ошибку:

Error in fread(txt, header = T, select = c("YYY", "MM", "DD",  : 
Not positioned correctly after testing format of header row. ch=' '

Первые 2 строки и 7 строк моих данных выглядят так:

 YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00

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

Я пытался использовать такую ​​команду для преобразования пробелов в запятую:

DT <- fread(
            paste("sed 's/\\s\\+/,/g'", txt),
            header=T,
            select=c('HHHH','MM','DD','HH')
)

без успеха: проблема остается, и кажется, что это медленно с командой sed.

Похоже, что Fread не любит «произвольное число пробелов» в качестве разделителя или пустого столбца в начале. Любая идея ?

Вот (возможно) наименьший воспроизводимый пример (символ новой строки после 40790):

txt<-print(" YYYY MM DD HH mm             19490             40790
 1991 10  1  1  0      1.046465E+00      1.568405E+00")

testDT<-fread(txt,
              header=T,
              select=c("YYY","MM","DD","HH")
)

Спасибо за вашу помощь !

ОБНОВИТЬ : - Ошибка не возникает с data.table 1.8. *. В этой версии таблица читается как одна уникальная строка, что не лучше.

ОБНОВЛЕНИЕ 2 - Как уже упоминалось в комментариях, я мог использовать sed для форматирования таблицы, а затем читать ее с помощью fread. Я поместил скрипт в ответ выше, где я создаю образец набора данных, а затем сравниваю некоторый system.time ().

Ответы на вопрос(5)

Ваш ответ на вопрос