Предупреждение "Неполная последняя строка" при попытке прочитать файл.csv в R
Я пытаюсь прочитать файл.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 и т. д.
Любая помощь или предложения будут серьезно оценены!
17 ответов
Сообщение указывает, что последняя строка файла не заканчивается символом конца строки (EOL) (перевод строки (\n
) или возврат каретки + перевод строки (\r\n
)). Первоначальное намерение этого сообщения было предупредить вас, что файл может быть неполным; большинство файлов данных имеют символ EOL как самый последний символ в файле.
Средство простое:
- Открыть файл
- Перейдите к самой последней строке файла
- Поместите курсор в конец этой строки
- Нажмите возврат
- Сохранить файл
Проблема легко решается; это потому, что последняя строка ДОЛЖНА быть пустой.
Скажите, если ваш контент
line 1,
line2
измените это на
line 1,
line2
(empty line here)
Сегодня я столкнулся с такой проблемой, когда пытался использовать R для чтения файла JSON, используя следующую команду:
json_data<-fromJSON(paste(readLines("json01.json"), collapse=""))
; и я разрешаю это моим методом выше.
Вы действительно уверены, что выбрали файл.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
с-функция, которая выдает ошибку. Он пытается прочитать первые 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
Сохраненный Excel формат csv разделяет все ячейки запятой. Пустые ячейки просто не имеют значения. read.table()
может легко справиться с этим, и распознает пустые ячейки просто отлично.
Использование readLines()
(с warn = FALSE
) сначала прочитать файл в символьном векторе.
После этого используйте text =
возможность прочитать вектор во фрейме данных с read.table()
pheasant <- read.table(
text = readLines(file.choose(), warn = FALSE),
header = TRUE,
sep = ","
)
Я понял, что было дано несколько ответов, но пока что нет реального решения.
Причина, как упомянуто выше, заключается в том, что в конце файла CSV отсутствует "Конец строки".
В то время как настоящее исправление должно исходить от Microsoft, обходной путь заключается в том, чтобы открыть CSV-файл с помощью текстового редактора и добавить строку в конце файла (также называемую клавишей возврата). Я использую программное обеспечение ATOM в качестве редактора текста / кода, но практически все основные текстовые редакторы подойдут.
В то же время, пожалуйста, сообщите об ошибке в Microsoft.
Вопрос: Мне кажется, что это проблема офиса 2016 года. У кого-нибудь есть проблема на ПК?
Я решил эту проблему, изменив кодировку в аргументе read.table с fileEncoding = "UTF-16" на fileEncoding = "UTF-8".
Я получил эту проблему однажды, когда у меня была одна цитата как часть заголовка. Когда я удалил его (т.е. переименовал соответствующий заголовок столбца из Jimmy's data
в Jimmys data
), функция не выдала предупреждений.
В разных европейских локалях, поскольку запятая служит десятичной точкой, вместо нее должна использоваться функция read.csv2.
Я получил то же сообщение. Мое исправление включало: я удалил все дополнительные листы (вкладки) в файле.csv, удалил нечисловые символы, сохранил файл как разделенный запятыми и загрузил в R v 2.15.0, используя стандартный язык:
имя файла<-read.csv ("имя файла", заголовок = TRUE)
В качестве дополнительной меры предосторожности я закрыл программное обеспечение и снова открыл его перед загрузкой CSV.
В моем случае это была буквально последняя строчка. Проблема была устранена путем буквального добавления пустой строки внизу CSV-файла.
ИЗ
cola,colb,colc
1,2,3
4,5,6
7,8,9
В
cola,colb,colc
1,2,3
4,5,6
7,8,9
Присмотритесь к этому дополнительному пространству в самом последнем ряду. Просто добавьте эту пустую строку , и это решит проблему.
ПРИМЕЧАНИЕ
Кажется, что синтаксический анализатор R CSV ищет этот самый последний символ новой строки в качестве нового разделителя строк. Это больше известно программистам как
\r\n
или же
\r
персонажи.
Проблема, которую вы описываете, возникла для меня, когда я переименовал .xlsx
как .csv
,
Что исправило это для меня было "Сохранить как" и затем сохранить его как .csv
снова.
Чтобы исправить эту проблему через сам R, я просто использовал read.xlsx(..)
вместо read.csv()
, Работает как шарм! Вам даже не нужно переименовывать. Переименование xlsx в csv не является жизнеспособным решением.
Существует довольно простое решение (если это действительно финальная строка, вызывающая проблемы), когда вам не нужно открывать файл перед его чтением:
cat("\n", file = "your/File/Dir", append = TRUE)
Нашел это решение здесь .
Моя работа заключалась в том, что я открыл csv
файл в текстовом редакторе, убрал лишние запятые в последнем значении, затем сохранил файл. Например, для следующего файла
Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,
Удалите запятые после 6, затем сохраните файл.
Откройте файл в текстовом редакторе или блокноте ++ и покажите форматирование, например, в текстовом редакторе вы показываете невидимые. Таким образом, вы можете видеть символы новой строки или вкладок. Часто Excel добавляет все виды вкладок в неправильных местах, а не последний символ новой строки, но вам нужно показать символы, чтобы увидеть это.
Я столкнулся с подобной проблемой, однако это выглядит как общее предупреждение, и на самом деле может не иметь отношения к символу конца строки. В моем случае он выдавал эту ошибку, потому что файл, который я использовал, содержал символы кириллицы, как только я заменил их латинскими символами, ошибка исчезла.
Я пробовал разные решения, такие как использование текстового редактора для вставки новой строки и получения символа конца строки, как рекомендовано в верхнем ответе выше. К сожалению, ничего из этого не сработало.
Решение, которое наконец-то сработало для меня, было очень простым: я скопировал содержимое файла CSV в новый пустой файл CSV, сохранил его, и проблема исчезла.