использование readr для импорта файла больших данных с разной длиной строки и пробелами в качестве разделителя

У меня проблема с чтением большого файла (около 2000000 строк) с помощью пакета readr.

Почему я хочу использовать пакет readr. Мой файл данных может содержать управляющие символы ASCII (0x01, равный ascii 26, равный CTRL + Z), который останавливает выполнение read.table(), и я отмечаю, что пакет readr не чувствителен к этой проблеме.

У моего файла разные длины строк, поэтому я бы использовал fill=TRUE, если бы мог использовать read.table().

Я попытался использовать read_table пакета readr, но безуспешно, потому что он, похоже, не находил пробелы в качестве разделителя столбцов.

Пробовал использовать read_delim. с кодом read_delim(file,delim=" "). Разделитель был найден, но первая строка считается основной длиной моего фрейма данных, и поэтому строки с большей длиной были усечены.

Есть ли у кого-нибудь совет?


person etienne leroy    schedule 12.05.2016    source источник
comment
Вы пробовали fread функцию в data.table пакете?   -  person Jaap    schedule 12.05.2016
comment
Я только что пробовал использовать fread, но похоже, что он остановился на пустой строке. У вас есть ключ к тому, чтобы остановить эту ошибку?   -  person etienne leroy    schedule 12.05.2016
comment
Вы можете попробовать установить blank.lines.skip = TRUE, см. ?fread для получения информации обо всех параметрах.   -  person Jaap    schedule 12.05.2016
comment
Что-то я понимаю по использованию read_table. Кажется, что это не работает, если каждая строка имеет одинаковую длину, и каждое поле находится в одной и той же позиции в каждой строке. Он похож на read.table, но при синтаксическом анализе, как файл, разделенный произвольным количеством пробелов, сначала находит пустые столбцы, а затем анализирует как файл фиксированной ширины. действительно, я пробовал с 10 идентичными строками, и это работает, и если бы у меня была более короткая строка в начале, она не   -  person etienne leroy    schedule 12.05.2016
comment
При попытке использовать blank.line.skip = TRUE в fread ›essai2‹ -fread (file2, sep =, blank.lines.skip = TRUE) возникает ошибка в fread (file2, sep =, blank.lines. skip = TRUE): неиспользуемый аргумент (blank.lines.skip = TRUE)   -  person etienne leroy    schedule 12.05.2016
comment
fread blank.lines.skip доступен только в data.table 1.9.7, которого еще нет в CRAN [ссылка] (stackoverflow.com/questions/34539408/) и, к сожалению, мне не удалось его установить.   -  person etienne leroy    schedule 13.05.2016
comment
не могли бы вы попробовать read_delim(file,delim="")? Обратите внимание, я удалил пробел между кавычками.   -  person rafa.pereira    schedule 13.05.2016
comment
read_delim (file, delim =) дал мне следующий результат: фрейм данных из одного столбца с одной строкой моих данных в каждой строке.   -  person etienne leroy    schedule 13.05.2016


Ответы (1)


Мне удалось собрать данные (из файла с именем file) в фрейм данных (rtcm1), используя следующий код:

 #create a vector for named the columns, actually I used more for define the number of columns to be used to import my file

 col<-paste("V",1:17,sep="")

#use read_delim of the readr packages with a separator is whitespace. I don't really know why but I need to put quote="" to collect all my datas. maybe to not consider "" as quoting characters.

 rtcm1<-read_delim(file,delim=" ",col_names=col,quote="")

С таким решением ячейки заполнения NA без данных и предупреждений выдаются функцией, но, похоже, она работает хорошо.

person etienne leroy    schedule 13.05.2016