fread无法读取第一列为空的.csv文件

时间:2014-03-12 06:59:56

标签: r csv data.table

说我有第一个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=','

为什么会发生这种情况,我该怎么做才能纠正这个问题?

3 个答案:

答案 0 :(得分:1)

至于我,我的问题只是第一次?我的文件行缺少ID值。

所以我能够通过将autostart指定到文件中远远超出非缺失值来解决问题:

fread("test.csv", autostart = 100L, skip = "A")

这可以保证当fread尝试自动识别sepsep2时,它会在文件格式良好的位置进行识别。

指定skip还可以确保fread找到以列名为基础的正确行。

如果第一个字段确实没有非缺失值,那么最好只使用Richard Scriven的方法从.csv中删除该字段,或者在您喜欢的文本编辑器中进行查找和替换

答案 1 :(得分:0)

我认为您可以使用fread函数的skip / select / drop属性来实现此目的。

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

答案 2 :(得分:0)

我已尝试制作该csv文件并运行代码。它似乎现在有用 - 对其他人来说也一样吗?我认为这可能是最后没有新行的问题(因此来自read.csv的警告),但fread可以很好地处理最后是否有新行