132

我正在尝试将 .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 列值等。

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

4

16 回答 16

154

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

补救措施很简单:

  1. 打开文件
  2. 导航到文件的最后一行
  3. 将光标放在该行的末尾
  4. return
  5. 保存文件
于 2011-05-13T18:51:05.320 回答
21

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

说,如果你的内容是

line 1,
line2

将其更改为

line 1,
line2
(empty line here)

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

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

; 我通过上述方法解决了它。

于 2017-05-04T09:16:05.130 回答
15

您确定您选择的是 .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()可以轻松处理这个问题,并且可以很好地识别空单元格。

于 2011-05-13T13:06:14.467 回答
13

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

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

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )
于 2018-05-01T22:26:53.037 回答
5

我意识到已经提供了几个答案,但还没有真正的修复。

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

虽然真正的修复应该来自微软,但要解决的是使用文本编辑器打开 CSV 文件并在文件末尾添加一行(也就是按回车键)。我使用 ATOM 软件作为文本/代码编辑器,但几乎所有基本的文本编辑器都可以。

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

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

于 2016-05-31T21:14:53.940 回答
2

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

文件名<-read.csv("文件名",header=TRUE)

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

于 2012-05-18T23:53:25.620 回答
2

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

于 2013-11-09T13:42:25.027 回答
2

我已经解决了这个问题,将 read.table 参数中的编码从 fileEncoding = "UTF-16" 更改为 fileEncoding = "UTF-8"。

于 2015-09-16T19:53:35.557 回答
2

当我有一个单引号作为标题的一部分时,我遇到了这个问题。当我删除它(即将相应的列标题从 重命名为Jimmy's dataJimmys data时,该函数没有返回任何警告。

于 2016-05-11T10:08:30.290 回答
1

当我将 a 重命名.xlsx.csv.

为我解决的问题是“另存为”,然后.csv再次将其另存为。

于 2013-01-06T11:32:02.060 回答
1

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

于 2018-05-03T18:56:02.653 回答
0

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

于 2014-05-30T23:31:13.687 回答
0

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

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

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

于 2015-02-18T04:38:55.290 回答
0

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

于 2018-04-01T20:14:47.277 回答
0

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

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

于 2018-05-16T08:51:54.013 回答
0

就我而言,这实际上是最后一行。该问题已通过在 CSV 文件底部添加一个空白行来解决。

cola,colb,colc
1,2,3
4,5,6
7,8,9

进入

cola,colb,colc
1,2,3
4,5,6
7,8,9

仔细看看最后一行的额外空间。只需添加该空行即可解决问题。

笔记

似乎 R 的 CSV 解析器正在寻找最后一个新行字符作为新行分隔符。这对于程序员来说更为人所知的是\r\nor\r字符。

于 2022-01-20T01:46:48.197 回答