2014-03-12 94 views
12

说我有第一个test.csv看起来像这样FREAD无法读取的.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=',' 

为什么会发生这种情况,我该如何解决这个问题?

+4

我认为这是一个错误 - 这是由@gsee在这里报告:https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5413&group_id=240&atid=975 –

+0

谢谢,我想现在回到1.8将解决现在的问题。 –

+0

@KevinUshey似乎我无法在R v3.03上安装v1.8.10。你有什么其他的建议? –

回答

1

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

所以我能够通过指定autostart足够远是成一个非缺失值弹出的文件来解决问题:

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

这保证了当FREAD尝试自动识别sepsep2,它在文件格式良好的地方这样做。

指定skip还可以确保fread找到正确的行,在该行中将列的名称作为基础。

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

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 
0

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