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

时间:2011-05-13 10:35:43

标签: r line-endings read.csv

我正在尝试将.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检验

任何帮助或建议都会受到重视!

15 个答案:

答案 0 :(得分:120)

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

补救措施很简单:

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

答案 1 :(得分:15)

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

说,如果您的内容是

line 1,
line2

将其更改为

line 1,
line2
(empty line here)

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

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

我用上面的方法解决了这个问题。

答案 2 :(得分: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()可以很容易地解决这个问题,并且可以很好地识别空单元格。

答案 3 :(得分:6)

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

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

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

答案 4 :(得分:3)

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

如上所述,原因是&#34;行尾&#34;丢失在CSV文件的末尾。

虽然真正的修补程序应该来自Microsoft,但四处走动是使用文本编辑器打开CSV文件并在文件末尾添加一行(也就是按返回键)。 我使用ATOM软件作为文本/代码编辑器,但几乎所有基本文本编辑器都可以。

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

问题:在我看来,这是2016年的办公室问题。有人在PC上有这个问题吗?

答案 5 :(得分:2)

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

  

文件名&LT; -read.csv( “文件名”,首标= TRUE)

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

我已经通过改变file.ncoding =&#34; UTF-16&#34;中的read.table参数中的编码解决了这个问题。 to fileEncoding =&#34; UTF-8&#34;。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

答案 10 :(得分:0)

当我将.xlsx重命名为.csv时,我所描述的问题就出现了。

为我修复的是“另存为”,然后再次将其另存为.csv

答案 11 :(得分:0)

在文本管理器或记事本++中打开文件并显示格式化,例如在文本争论者中,你会显示隐形。这样您就可以看到新的行或制表符 excel通常会在错误的位置添加各种标签,而不是最后一个新行字符,但是您需要显示符号才能看到这一点。

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

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