在read.table()中:readTableHeader找到不完整的最后一行

时间:2014-03-04 12:22:06

标签: r csv read.table

当我尝试read.csv()该文件时,我有一个CSV,我收到警告警告消息:

In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on ...

尽管已经为解决方案搜索了StackOverflow和R-help,但我无法隔离这个问题。

这是数据的Dropbox链接:https://www.dropbox.com/s/h0fp0hmnjaca9ff/PING%20CONCOURS%20DONNES.csv

8 个答案:

答案 0 :(得分:18)

Hendrik Pon所述,该消息表明文件的最后一行不以行尾(EOL)字符结束(换行符(\ n)或回车符+换行符\ n \ r \ n \ n))的

补救措施很简单:

  • 打开文件
  • 导航到文件的最后一行
  • 将光标放在该行的末尾
  • 按返回/输入
  • 保存文件

所以这是你的文件没有警告

df=read.table("C:\\Users\\Administrator\\Desktop\\tp.csv",header=F,sep=";")
 df
    V1               V2               V3               V4               V5               V6               V7               V8               V9              V10
1 Date 20/12/2013 09:04 20/12/2013 09:08 20/12/2013 09:12 20/12/2013 09:16 20/12/2013 09:20 20/12/2013 09:24 20/12/2013 09:28 20/12/2013 09:32 20/12/2013 09:36
2    1           1,3631           1,3632           1,3634           1,3633            1,363           1,3632           1,3632           1,3632           1,3629
3    2          0,83407          0,83408          0,83415          0,83416          0,83404          0,83386          0,83407          0,83438          0,83472
4    3           142,35           142,38           142,41            142,4           142,41           142,42           142,39           142,42            142,4
5    4           1,2263          1,22635          1,22628          1,22618          1,22614          1,22609          1,22624          1,22643           1,2265

但我认为你不应该以这种方式阅读,因为你必须再次重塑数据帧,谢谢。

答案 1 :(得分:2)

我在记事本中创建数据矩阵时遇到了同样的问题。 所以我来到最后一行数据矩阵并按下回车键。现在我有一个" n"行数据矩阵和一个新的空白行,光标位于" n + 1"线。 问题解决了。

答案 2 :(得分:1)

我对.xls文件有同样的问题。 我的解决方案是将文件保存为制表符分隔的.txt。然后,您也可以手动将.txt扩展名更改为.xls,然后可以使用read.delim打开数据框。

无论如何,这是克服这个问题的非常粗鲁的方式。

答案 3 :(得分:0)

这不是CSV文件,每行都是一列,您可以手动解析它,例如:

file <- '~/Downloads/PING CONCOURS DONNES.csv'
lines <- readLines(file)
columns <- strsplit(lines, ';')
headers <- sapply(columns, '[[', 1)
data <- lapply(columns, '[', -1)
df <- do.call(cbind, data)
colnames(df) <- headers
print(head(df))

请注意,您可以忽略该警告,因为缺少最后一行。

答案 4 :(得分:0)

是否拥有“适当的” CSV文件取决于首先用于生成该文件的软件。

考虑Google表格。每当通过utils::download.file下载的CSV文件少于五行时,就会发出警告。这可能与以下事实有关:(utils:read.table

通过查看输入的前五行(如果输入少于五行,则查看整个输入)来确定数据列的数目,或者如果指定了col.names且更长,则从<markers> <marker id="2" name="Diane Gold, CORPORATE TAI CHI means do it in a group." address="Boca Raton, FL 33432, USA" lat="26.340200" lng="-80.081400" type="school"/> <marker id="3" name="Tai Chi - Stress Management and Relaxation Technology" address="10100 Roe Ave, Overland Park, KS 66207, USA" lat="38.945300" lng="-94.639400" type="school"/> <marker id="4" name="Wise Orchid Taijiquan and QiGong" address="2002 E Union St, Seattle, WA 98122, USA" lat="47.613200" lng="-122.306000" type="school"/> </marker> 的长度开始确定

以我的短暂经验,如果CSV文件中的数据为矩形,则可以忽略该警告。

现在考虑使用LibreOffice Calc。无论CSV文件中的行数如何,都不会发出任何警告。

答案 5 :(得分:0)

我遇到了类似的问题,但“输入方法”没有解决。提到错误后,我注意到数据帧的行数少于CSV的行数。我注意到一些非字母数字值阻碍了R的导入。

我关注了Aurezio在[以下链接](https://stackoverflow.com/a/29150226)上的评论,以删除非字母数字值(我包括空格)

以下是代码段:

Function CleanCode(Rng As Range)
    Dim strTemp As String
    Dim n As Long

    For n = 1 To Len(Rng)
        Select Case Asc(Mid(UCase(Rng), n, 1))
            Case 32, 48 To 57, 65 To 90
                strTemp = strTemp & Mid(UCase(Rng), n, 1)
        End Select
    Next
    CleanCode = strTemp
End Function

然后我将CleanCode用作最终结果的函数

答案 6 :(得分:0)

另一种选择:从 R 发送一个额外的换行符(而不是打开文件)

来自Getting Data from Excel to R

cat("\n", file = file.choose(), append = TRUE)

答案 7 :(得分:-2)

或者您可以直接打开该excel文件并将其另存为.csv文件,然后警告说警告已消失。