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

我尝试将一个.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 检验,然后列1和列3值的 t 检验,等等。

如有任何帮助或建议,我们将不胜感激!

202626 次浏览

您确实选择了。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()可以很容易地处理这个问题,并且可以很好地识别空单元格。

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

补救办法很简单:

  1. 打开文件
  2. 导航到文件的最后一行
  3. 将光标放在该行的末尾
  4. return
  5. 保存文件

我收到了同样的信息。我的修复包括: 我删除了。Csv 文件,删除非数字字符,保存为逗号分隔的文件,并在 R v 2.15.0中使用标准语言加载:

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

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

您所描述的问题发生在我将 .xlsx重命名为 .csv时。

对我来说,修复它的方法是“另存为”,然后再次将其保存为 .csv

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

在文本管理器或记事本 + + 中打开文件,并显示格式,例如在文本管理器中,您显示不可见。这样您就可以看到新的行或制表符字符 Excel 通常会在错误的位置添加各种选项卡,而不是添加最后一个新行字符,但是您需要显示这些符号才能看到这一点。

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

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

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

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

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

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

如上所述,原因是 CSV 文件末尾缺少一个“ End of line”。

虽然真正的修复应该来自微软,周围的步骤是打开 CSV 文件与文本编辑器,并添加一行在文件的结尾(即按回车键)。 我使用 ATOM 软件作为文本/代码编辑器,但实际上所有基本的文本编辑器都可以。

同时,请向微软报告这个错误。

问题: 在我看来,这是一个办公室2016年的问题。是否有人有问题的个人电脑?

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

比如说,如果你的内容是

line 1,
line2

改成

line 1,
line2
(empty line here)

今天我遇到了这种问题,当我试图使用 R 来读取 JSON 文件时,通过使用下面的命令:

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

我用上述方法解决。

我曾经遇到过类似的问题,但是这似乎是一个通用的警告,并且可能实际上与行结束字符无关。在我的例子中,它出现这个错误是因为我使用的文件包含西里尔字符,一旦我用拉丁字符替换它们,错误就消失了。

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

然后使用 text =选项将矢量读入具有 read.table()的数据帧中

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

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

我尝试了不同的解决方案,例如使用一个文本编辑器插入一个新的行,并得到上面最上面的答案中建议的 行尾字符。不幸的是,这些都不管用。

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

对我来说,这就是最后一句台词。这个问题通过在 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\n\r字符。

有一个非常简单的解决方案(如果确实是最后一行引起了麻烦) ,你不需要在阅读之前打开文件:

cat("\n", file = "your/File/Dir", append = TRUE)

找到了这个解决方案 给你