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

12

假设我有第一个名为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=','

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


4
我认为这是一个漏洞——@gsee在这里报告了:https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5413&group_id=240&atid=975 - Kevin Ushey
谢谢,所以暂时回到1.8版本应该可以解决问题,我想。 - Wet Feet
@KevinUshey 看起来我无法在 R v3.03 上安装 v1.8.10。你有其他的建议吗? - Wet Feet
2
请等待6个小时,我相信软件包的作者们会为您提供解决方案。 - Roman Luštrik
2
只想补充一下,我希望这个问题能够尽快得到解决。 - Chris
2
@WetFeet,在1.9.3版本中,它似乎能够像read.csv()一样工作。如果你不想要那个NA列,可以使用select参数:fread("test.csv", select=2:6, header=FALSE) - Arun
3个回答

1
对于我来说,我的问题只是文件的前几行缺少ID值。因此,我可以通过将"autostart"指定到足够远的位置,以便出现非缺失值来解决问题。请保留html标签。
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都可以很好地处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接