【问题标题】:fread unable to read .csv files with first column emptyfread 无法读取第一列为空的 .csv 文件
【发布时间】:2014-04-16 03:40:29
【问题描述】:

假设我有第一个看起来像这样的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=','

为什么会发生这种情况,我可以做些什么来纠正这个问题?

【问题讨论】:

  • 我认为这是一个错误——@gsee 在这里报告了它:r-forge.r-project.org/tracker/…
  • 谢谢,我想现在恢复到 1.8 可以解决问题。
  • 等待 6 小时,我相信软件包作者会为您提供解决方案。
  • 只是想补充一点,希望这个问题能尽快解决。
  • @WetFeet,在1.9.3 中,它似乎以read.csv() 工作。如果您不想拥有该 NA 列,请使用 select 参数:fread("test.csv", select=2:6, header=FALSE)

标签: r csv data.table


【解决方案1】:

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

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

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

这保证了当 fread 尝试自动识别 sepsep2 时,它会在文件中格式正确的位置这样做。

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

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

【讨论】:

    【解决方案2】:

    我认为您可以为此目的使用 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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-06-02
        • 1970-01-01
        • 2019-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 1970-01-01
        相关资源
        最近更新 更多