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 ().