Fread не может читать .csv файлы с первым столбцом пустым
Скажем, у меня есть первый test.csv
, который выглядит как
,a,b,c,d,e
Если я попытаюсь прочитать его с помощью read.csv
, он отлично работает.
read.csv("test.csv",header=FALSE)
# V1 V2 V3 V4 V5 V6
#1 NA a b c d e
#Warning message:
#In read.table(file = file, header = header, sep = sep, quote = quote, :
# incomplete final line found by readTableHeader on 'test.csv'
Однако, если я попытаюсь прочитать этот файл с помощью fread
, я получаю вместо него ошибку.
require(data.table)
fread("test.csv",header=FALSE)
#Error in fread("test.csv", header = FALSE) :
# Not positioned correctly after testing format of header row. ch=','
Почему это происходит и что я могу сделать, чтобы исправить это?
Ответы
Ответ 1
Как для меня, моя проблема была только в том, что первая? строки моего файла имели отсутствующее значение ID.
Итак, я смог решить проблему, указав autostart
достаточно далеко в файл, чтобы появилось непустое значение:
fread("test.csv", autostart = 100L, skip = "A")
Это гарантирует, что когда fread пытается автоматически идентифицировать sep
и sep2
, он делает это в хорошо отформатированном месте в файле.
Задание skip
также гарантирует, что fread
найдет правильную строку, в которой будут основываться имена столбцов.
Если в первом поле нет никаких значений для бездействия, вам лучше просто удалить это поле из CSV с помощью подхода Ричарда Скривена или найти и заменить в своем любимом текстовом редакторе.
Ответ 2
Я думаю, что для этой цели вы можете использовать атрибуты skip/select/drop функции fread.
fread("myfile.csv",sep=",",header=FALSE,skip="A")#to just skip the 1st column
fread("myfile.csv",sep=",",header=FALSE,select=c(2,3,4,5)) # to read other columns except 1
fread("myfile.csv",sep=",",header=FALSE,drop="A") #to drop first column
Ответ 3
Я пробовал сделать этот файл csv и запускать код. Кажется, теперь это работает - то же самое для других людей? Я думал, что это может быть проблема с отсутствием новой строки в конце (отсюда предупреждение от read.csv
), но fread
отлично справляется с тем, есть ли новая строка в конце или нет.