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

Kat*_*ate 106 r line-endings read.csv

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

pheasant<-read.table(file.choose(),header=TRUE,sep=",")
Run Code Online (Sandbox Code Playgroud)

我收到此警告消息:

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."
Run Code Online (Sandbox Code Playgroud)

有一些我认为可能引起这种警告的事情,但不幸的是我不太了解R自己诊断问题,所以我想我会在这里发帖,希望别人可以为我诊断它!

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

任何帮助或建议将非常感谢!

小智 124

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

补救措施很简单:

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

  • 这不是文件的最后一行.这是他正在阅读的标题,这是你的前五行. (2认同)
  • @WorldGov“不完整的最后一行”是一个警告(不是错误),可能由于不同的原因而弹出。就您而言,这是缺乏最终 EOL。在您的情况下,函数 readTableHeader 不可能引发警告,因为该函数不会读取最后一行。因此你的问题与OP的问题不一样。 (2认同)

Vin*_*Jia 19

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

如果您的内容是,请说

line 1,
line2
Run Code Online (Sandbox Code Playgroud)

改为

line 1,
line2
(empty line here)
Run Code Online (Sandbox Code Playgroud)

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

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

; 我通过上面的方法解决它.


Jor*_*eys 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'
Run Code Online (Sandbox Code Playgroud)

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,
Run Code Online (Sandbox Code Playgroud)

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

> 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
Run Code Online (Sandbox Code Playgroud)

excel保存的csv格式用逗号分隔所有单元格.空单元格没有值.read.table()可以很容易地处理这个,并识别空单元格.


Dam*_*ian 7

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

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

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


小智 5

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

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

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

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

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