我正在尝试将.csv文件读入R并使用此公式:
pheasant<-read.table(file.choose(),header=TRUE,sep=",")
我收到此警告消息:
"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."
我认为可能有一些事情引起了这个警告,但不幸的是我不太了解R自己诊断问题,所以我想我会在这里发帖,希望其他人可以为我诊断它!
任何帮助或建议都会受到重视!
答案 0 :(得分:120)
该消息表明文件的最后一行没有以行尾(EOL)字符(换行符(\n
)或回车符+换行符(\r\n
))结束。此消息的初衷是警告您文件可能不完整;大多数数据文件都有一个EOL字符作为文件中的最后一个字符。
补救措施很简单:
答案 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文件中,然后将其保存,问题就消失了。