Предупреждение «Неполная последняя строка» при попытке прочитать файл .csv в R - PullRequest
102 голосов
/ 13 мая 2011

Я пытаюсь прочитать файл .csv в R и при использовании этой формулы:

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

Я получаю это предупреждение:

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

Есть пара вещей, которые, как я думал, могли послужить причиной этого предупреждения, но, к сожалению, я не знаю достаточно о R, чтобы самостоятельно диагностировать проблему, поэтому я решил опубликовать здесь в надежде, что кто-то другой сможет диагностировать ее для меня !

  • Файл .csv изначально был файлом Excel, который я сохранил в формате .csv
  • файл содержит три столбца данных
  • каждый столбец данных имеет различную длину, т. Е. В каждом столбце имеется различное количество значений
  • Я хочу сравнить средние значения (используя t-критерий или его эквивалент в зависимости от нормального / ненормального распределения) двух столбцов за раз, например, t-критерий между значениями столбца 1 и 2, затем t-тест значений столбца 1 и столбца 3 и т. д.

Любая помощь или предложения будут серьезно оценены!

Ответы [ 15 ]

122 голосов
/ 13 мая 2011

Сообщение указывает, что последняя строка файла не заканчивается символом конца строки (EOL) (перевод строки (\n) или возврат каретки + перевод строки (\r\n)). Первоначальное намерение этого сообщения состояло в том, чтобы предупредить вас, что файл может быть неполным; большинство файлов данных имеют символ EOL как самый последний символ в файле.

Средство простое:

  1. Открыть файл
  2. Перейти к самой последней строке файла
  3. Поместить курсор в конец этой строки
  4. Нажмите Возврат
  5. Сохранить файл
16 голосов
/ 04 мая 2017

Проблема легко решается;это потому, что последняя строка ДОЛЖНА быть пустой.

Скажем, если ваш контент

line 1,
line2

, измените его на

line 1,
line2
(empty line here)

Сегодня я столкнулся с такой проблемой, когдаЯ пытался использовать R для чтения файла JSON, используя следующую команду:

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

;и я разрешаю это по моему методу.

14 голосов
/ 13 мая 2011

Вы действительно уверены, что выбрали файл .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, а это не так.

Следующее, что вам нужно сделать, это открыть файл в Блокноте или Wordpad (или другом редакторе) и проверить, что формат соответствует моему файлу 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

Формат CSV, сохраненный в Excel, разделяет все ячейки запятой. Пустые ячейки просто не имеют значения. read.table() может легко справиться с этим, и прекрасно распознает пустые ячейки.

6 голосов
/ 02 мая 2018

Используйте readLines()warn = FALSE), чтобы сначала прочитать файл в символьный вектор.

После этого используйте опцию text = для считывания вектора во фрейм данных с read.table()

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )
3 голосов
/ 01 июня 2016

Я понял, что было дано несколько ответов, но пока что нет реального исправления.

Причина, как упоминалось выше, заключается в том, что в конце файла CSV отсутствует «Конец строки».

Хотя настоящее исправление должно исходить от Microsoft, можно обойтись, открыв CSV-файл с помощью текстового редактора и добавив строку в конец файла (также называемую клавишей возврата). Я использую программное обеспечение ATOM в качестве редактора текста / кода, но практически все основные текстовые редакторы подойдут.

Тем временем, пожалуйста, сообщите об ошибке в Microsoft.

Вопрос: Мне кажется, что это проблема офиса 2016 года. У кого-нибудь есть проблема на ПК?

2 голосов
/ 09 ноября 2013

В различных европейских локалях, поскольку запятая служит десятичной точкой, вместо нее должна использоваться функция read.csv2.

2 голосов
/ 19 мая 2012

Я получил то же сообщение.Мое исправление включало: я удалил все дополнительные листы (вкладки) в файле .csv, удалил нечисловые символы, сохранил файл как разделенный запятыми и загрузил в R v 2.15.0, используя стандартный язык:

filename <-read.csv ("filename", header = TRUE) </p>

В качестве дополнительной гарантии я закрыл программное обеспечение и снова открыл его перед загрузкой CSV.

1 голос
/ 03 мая 2018

Чтобы решить эту проблему через сам R, я просто использовал read.xlsx(..) вместо read.csv(). Работает как шарм! Вам даже не нужно переименовывать. Переименование xlsx в csv не является жизнеспособным решением.

1 голос
/ 11 мая 2016

Эта проблема возникла однажды, когда в заголовке была одинарная кавычка. Когда я удалил его (т.е. переименовал соответствующий заголовок столбца с Jimmy's data на Jimmys data), функция не выдала предупреждений.

1 голос
/ 16 сентября 2015

Я решил эту проблему, изменив кодировку в аргументе read.table с fileEncoding = "UTF-16" на fileEncoding = "UTF-8".

...