Любой способ заставить fread() data.table не останавливаться на пустых строках?
(очень простой вопрос - но я не смог найти ответ в справке fread
)...
Итак, у меня есть таблица с несколькими пустыми строками в середине. Когда я пытаюсь открыть его с помощью fread
, он останавливается, говоря Stopped reading at empty line 10006, but text exists afterwards (discarded)
. Есть ли способ избежать этого без изменения файла данных?
Ответы
Ответ 1
Версия 1.9.8 таблицы данных, выпущенная 25 ноября-2016, имеет новую опцию blank.lines.skip
для пропуска пустых строк.
text <- "1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c"
library(data.table)
fread(text)
## V1 V2
## 1: 2 b
## 2: 3 c
## 3: 4 a
## Warning message:
## In fread("1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c") :
## Stopped reading at empty line 6 but text exists afterwards (discarded): 5,b
fread(text, blank.lines.skip=TRUE)
## V1 V2
## 1: 1 a
## 2: 2 b
## 3: 3 c
## 4: 4 a
## 5: 5 b
## 6: 6 c
Ответ 2
Вы можете использовать команду Windows findstr
, чтобы избавиться от пустых строк.
Пример файла "Data.txt".
1,a
2,b
3,c
4,a
5,b
6,c
Воспроизводит вашу ошибку.
> dt <- fread("Data.txt")
Warning message:
In fread("Data.txt") :
Stopped reading at empty line 6 of file, but text exists afterwards (discarded): 5,b
Но работает при использовании Windows findstr
непосредственно в fread
.
> require(data.table)
> dt <- fread('findstr "." Data.txt')
# > dt
# V1 V2
# 1: 1 a
# 2: 2 b
# 3: 3 c
# 4: 4 a
# 5: 5 b
# 6: 6 c
Ответ 3
Если у кого-то есть аналогичная проблема, я заметил, что data.table 1.10.4 (текущий выпуск 2017, который я использую), по-видимому, создает пустые ошибки строки с некоторыми файлами, если вы явно не заявляете:
'strip.white = FALSE'
Я смотрел на то, что было явно линейными ошибками в ~ 350 файлах, которые я пытался импортировать. Некоторые строки были разбиты на две строки в оригиналах и, поскольку они содержали различные формы информации, fread предупреждал о проблемах с классом для некоторых столбцов. Но я одновременно получал ошибки "пустой строки" почти для каждого файла, на разных строках. Я вручную проверил их в блокноте ++. Много раз. Пустых линий не было и остались линии; многие из них. Пробовал работать с аргументами импорта и отключил специально strip.white, удалил предупреждения о пустых строках.