尝试将.csv文件读入R时出现“不完整的最后一行”警告


114

我正在尝试将.csv文件读入R并使用以下公式:

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

我收到此警告消息:

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

我认为可能有几件事导致了此警告,但是不幸的是,我对R的了解不足,无法自己诊断问题,因此我想在这里发布,希望其他人可以为我诊断出来!

  • .csv文件最初是一个Excel文件,我将其保存为.csv格式
  • 该文件包含三列数据
  • 每个数据列的长度都不同,即,每个列中的值数量不同
  • 我想一次比较两列的均值(使用t检验或等效项,取决于正态/非正态分布),例如,在第1列值和第2列值之间进行t检验,然后进行t-测试第1列和第3列的值,等等。

任何帮助或建议,将不胜感激!


1
@Kate:您可以将我们链接到文件本身吗?我有一些想法,但是如果没有文件,很难说出是哪个问题。
乔里斯·梅斯

嗨,乔里斯-我不确定该怎么做,对不起...
凯特

第一列有1045个值,第二列有623个值,第三列有871个值,如果有帮助...?它们都是整数和半数的数值,即23、24.5等...
Kate

1
我认为这就是问题所在,因为read.table将您的数据放入一个数据列,该列必须具有相等的列长。
克雷姆爵士,2011年

1
@詹姆斯:不,不是。readTableHead(底层c函数)读取前5行。错误起源于此。
乔里斯·梅斯

Answers:


134

该消息表明文件的最后一行没有以行尾(EOL)字符结尾(换行(\n)或回车+换行(\r\n))。此消息的初衷是警告您文件可能不完整。大多数数据文件都有EOL字符作为文件中的最后一个字符。

解决方法很简单:

  1. 开启档案
  2. 导航到文件的最后一行
  3. 将光标置于该行的末尾
  4. return
  5. 保存文件

2
不是文件的最后一行。这是他正在阅读的标题,这是您的前五行。
Joris Meys 2011年

@JorisMeys错误消息,但是,指向文件的最后一行。采取上述步骤确实可以消除警告。
WorldGov

@WorldGov“最后一行不完整”是一个警告(不是错误),由于不同的原因而可能弹出。在您的情况下,那是缺少最终的停产期。在您的情况下,无法通过readTableHeader函数引发警告,因为该警告不会读取最后一行。因此,您的问题与OP的问题不同。
Joris Meys,

20

这个问题很容易解决。这是因为最后一行必须为空。

说,如果您的内容是

line 1,
line2

更改为

line 1,
line2
(empty line here)

今天,当我尝试通过以下命令使用R读取JSON文件时遇到了此类问题:

json_data<-fromJSON(paste(readLines("json01.json"), collapse=""))

; 我通过上面的方法解决了


1
使用管道工托管R API我遇到了同样的问题。Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'通过在末尾添加一个空行来解决警告。不知道为什么会这样。
HoofarLotusX

同样在这里。谢谢。
Megadeth

14

您确实确定选择了.csv文件而不是.xls文件吗?如果尝试读取.xls文件,则只能重现该错误。如果我尝试读入.csv文件或任何其他文本文件,则无法重新创建收到的错误。

> Data <- read.table("test.csv",header=T,sep=",")
> Data <- read.table("test.xlsx",header=T,sep=",")
Warning message:
In read.table("test.xlsx", header = T, sep = ",") :
  incomplete final line found by readTableHeader on 'test.xlsx'

readTableHead是给出错误的c函数。它尝试读入前n行(标准是前5行)以确定数据的类型。使用读取其余数据scan()。因此,问题在于文件的格式。

一种查找方法是将工作目录设置为文件所在的目录。这样,您就可以看到所读文件的扩展名。我知道在Windows上它不是标准显示的,所以您可能会认为它是csv而不是。

接下来,您应该在记事本或写字板(或其他编辑器)中打开文件,并检查格式是否与我的文件等效test.csv

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,

该文件将为您提供以下数据框:

> read.table(testfile,header=T,sep=",")
  Test1 Test2 Test3
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4    NA
5     5     5    NA
6    NA     6    NA

excel保存的csv格式以逗号分隔所有单元格。空单元格只是没有价值。read.table()可以轻松应对,并识别出空单元格。


假设这是Windows 7环境,如果Kate查看复制到桌面或文件夹中的文件,则.csv文件的图标上带有“ a”,而.xlsx文件的图标上带有更多外观。像工作表一样。这是确定文件类型的快速直观方法。当图标较大时,将其保存到桌面时更容易查看。:)
米歇尔

7

首先使用readLines()(与warn = FALSE)将文件读入字符向量。

之后,使用该text =选项将向量读入数据帧read.table()

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )

3

我意识到已经提供了几个答案,但还没有真正的解决方法。

如上所述,原因是CSV文件末尾缺少“行尾”。

虽然真正的Fix应该来自Microsoft,但解决方法是使用文本编辑器打开CSV文件,并在文件末尾添加一行(也就是按回车键)。我将ATOM软件用作文本/代码编辑器,但实际上所有基本的文本编辑器都可以。

同时,请将该错误报告给Microsoft。

问题:在我看来,这是Office 2016的问题。有人在PC上有问题吗?


2

我收到了同样的消息。我的修复程序包括:我删除了.csv文件中的所有其他工作表(标签),消除了非数字字符,将文件重新保存为逗号分隔并使用标准语言在R v 2.15.0中加载:

filename <-read.csv(“ filename”,header = TRUE)

作为额外的保护措施,我在加载csv之前关闭了软件并重新打开。


2

在各种欧洲语言环境中,由于逗号用作小数点,因此应该改用read.csv2函数。



1

当描述发生了我你当我改名的问题.xlsx作为.csv

对我来说,解决此问题的方法是“另存为”,然后.csv再次保存。


1

当标题中包含单引号时,就遇到了这个问题。当我删除它(即,将相应的列标题从重命名Jimmy's dataJimmys data)时,该函数未返回任何警告。


1

要通过R本身解决此问题,我只使用read.xlsx(..)而不是read.csv()。奇迹般有效!!您甚至不必重命名。将xlsx重命名为csv是不可行的解决方案。


#Digvijay_Sawant,不确定您的最后评论是什么意思,但与此处的其他解决方案不同(我几乎尝试了所有解决方案:令人发狂!),您的是唯一可行的解​​决方案。
W巴克

1
@WBarker在最初的问题中,作者将Excel保存到csv中,然后尝试读取它。好的,将excel转换为csv可能会更改诸如数据格式之类的内容,可能会发生数据丢失等情况。Excel可能以与csv不同的格式存储“文件结尾”,这可能会使函数难以确定文件的结尾。好吧,我不是专家,只是一个想法:-)
Digvijay Sawant

0

在文本牧马人或记事本++中打开文件并显示格式,例如在文本牧马人中您确实显示不可见。这样,您可以看到换行符或制表符,通常excel会在错误的位置添加各种制表符,而不是最后一个换行符,但是您需要显示符号才能看到。


0

我的解决方法是,csv在文本编辑器中打开文件,删除最后一个值上的多余逗号,然后保存文件。例如以下文件

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,

6后删除逗号,然后保存文件。


0

我也遇到过类似的问题,但是这似乎是一个一般性警告,实际上可能与行尾字符无关。在我的情况下,出现此错误是因为我使用的文件包含西里尔字母,一旦我将它们替换为拉丁字符,该错误便消失了。


0

我尝试了不同的解决方案,例如使用文本编辑器插入新行并获取行尾字符按照上面的最佳答案中的建议。不幸的是,这些都不起作用。

最终对我有用解决方案非常简单:我将CSV文件的内容复制粘贴到新的空白CSV文件中,将其保存,然后问题就消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.