【问题标题】:In read.table(): incomplete final line found by readTableHeader在 read.table() 中:readTableHeader 找到的最后一行不完整
【发布时间】:2014-04-05 23:34:44
【问题描述】:

当我尝试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

【问题讨论】:

  • 这只是一个警告,所以您不必担心。如果您在文件末尾添加一个空行,它就会消失

标签: r csv read.table


【解决方案1】:

正如Hendrik Pon 所解释的,该消息表明文件的最后一行不以行尾 (EOL) 字符结尾(换行符 (\n) 或回车+换行符 (\r\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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我对 .xls 文件也有同样的问题。 我的解决方案是将文件另存为制表符分隔的 .txt。然后你也可以手动把.txt扩展名改成.xls,然后就可以用read.delim打开dataframe了。

      无论如何,这是解决问题的非常粗鲁的方法。

      【讨论】:

        【解决方案4】:

        拥有“正确”的 CSV 文件取决于最初用于生成它的软件。

        考虑使用 Google 表格。每次通过utils::download.file 下载的 CSV 文件包含少于五行时都会发出警告。这可能与 (utils:read.table):

        数据列的数量通过查看输入的前五行(如果少于五行则为整个输入)确定,或者根据col.names 的长度(如果指定且更长)确定。

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

        现在考虑 LibreOffice Calc。无论 CSV 文件中有多少行,都不会出现任何警告。

        【讨论】:

          【解决方案5】:

          这不是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))
          

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

          【讨论】:

          • 谢谢帮助 为什么不是csv文件?
          • 我们通常所说的CSV文件,表格每行一行。这里每列有一行。
          【解决方案6】:

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

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

          这里是sn-p:

          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 作为最终结果的函数

          【讨论】:

            【解决方案7】:

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

            来自Getting Data from Excel to R

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

            【讨论】:

              【解决方案8】:

              或者您可以简单地打开该 excel 文件并将其保存为 .csv 文件,然后警告就消失了。

              【讨论】:

              • 点评来源: 嗨,这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为评论发布。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-03-17
              • 2023-03-17
              • 1970-01-01
              • 2022-06-11
              • 2012-06-12
              相关资源
              最近更新 更多