В read.table (): неполная последняя строка, найденная readTableHeader

У меня есть CSV-файл, когда я пытаюсь read.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


person user3351370    schedule 04.03.2014    source источник
comment
Это просто предупреждение, поэтому вам не о чем беспокоиться. Если вы добавите пустую строку в конец файла, она исчезнет   -  person Jake Burkhead    schedule 04.03.2014


Ответы (8)


Как объяснил Хендрик Пон, сообщение указывает, что последняя строка файла не заканчивается символом конца строки (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

Но я думаю, вам не следует читать таким образом, потому что вам нужно снова изменить фрейм данных, спасибо.

person Aashu    schedule 04.03.2014

Я столкнулся с той же проблемой при создании матрицы данных в блокноте. Итак, я подошел к последней строке матрицы данных и нажал клавишу ввода. Теперь у меня есть матрица данных строки «n» и новая пустая строка с курсором в начале строки «n + 1». Задача решена.

person aditya harbola    schedule 06.11.2015

У меня была такая же проблема с файлами .xls. Мое решение - сохранить файл в виде файла .txt с разделителями табуляцией. Затем вы также можете вручную изменить расширение .txt на .xls, а затем вы можете открыть фрейм данных с помощью read.delim.

В любом случае это очень грубый способ решить проблему.

person Quechua    schedule 27.09.2016

Это не файл 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))

Обратите внимание, что вы можете игнорировать предупреждение, поскольку отсутствует последний конец строки.

person Karl Forner    schedule 04.03.2014
comment
Спасибо за помощь. Почему это не файл csv? - person user3351370; 04.03.2014
comment
То, что мы обычно называем CSV-файлом, содержит по одной строке в строке таблицы. Здесь у вас одна строка на столбец. - person Karl Forner; 04.03.2014

Наличие «правильного» CSV-файла зависит от программного обеспечения, которое изначально использовалось для его создания.

Рассмотрим Google Таблицы. Предупреждение будет выдаваться каждый раз, когда CSV-файл, загруженный через utils::download.file, содержит менее пяти строк. Вероятно, это связано с тем, что (utils:read.table):

Количество столбцов данных определяется путем просмотра первых пяти строк ввода (или всего ввода, если он содержит менее пяти строк) или длины col.names, если она указана и больше.

По моему небольшому опыту, если данные в файле CSV имеют прямоугольную форму, предупреждение можно игнорировать.

Теперь рассмотрим LibreOffice Calc. Никаких предупреждений не будет, независимо от количества строк в CSV-файле.

person Samuel-Rosa    schedule 11.03.2020

У меня была аналогичная проблема, которую не удалось решить с помощью метода ввода. После упомянутой ошибки я заметил, что количество строк в кадре данных было меньше, чем в 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 как функцию для окончательного результата.

person Meghana Chamarthy    schedule 03.09.2020

Другой вариант: отправка дополнительной строки из R (вместо открытия файла)

Из Получение данных из Excel в R

cat("\n", file = file.choose(), append = TRUE)
person Dax    schedule 01.03.2021

Или вы можете просто открыть этот файл Excel и сохранить его как файл .csv и вуаля, предупреждение исчезло.

person Anju    schedule 14.10.2018
comment
Из обзора: Привет, этот пост, похоже, не дает качественного ответа на вопрос. Пожалуйста, либо отредактируйте свой ответ и улучшите его, либо просто опубликуйте его как комментарий. - person sɐunıɔןɐqɐp; 14.10.2018