Попередження "неповний завершальний рядок" при спробі зчитувати файл .csv в R


114

Я намагаюся прочитати .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 тощо.

Будь-яка допомога чи пропозиції були б вдячні!


1
@Kate: чи можете ви зв’язати нас із самим файлом? У мене є кілька ідей, але важко сказати, яка проблема, не маючи файлу.
Йоріс Майс

Привіт Йоріс - Я не впевнений, як це зробити, вибач ...
Кейт,

Перший стовпець має 1045 значень, другий має 623 значення, а третій 871, якщо це допомагає ...? Всі вони є числовими значеннями в цілому та половинному числах, тобто 23, 24,5 тощо ...
Кейт,

1
Я думаю, що це проблема, тому що read.table ставить ваші дані у кадр даних, який повинен мати рівні довжини стовпців.
Сер Ксилем

1
@James: Ні, це не так. readTableHead (основна функція c) читає перші 5 рядків. Помилка виникає саме там.
Joris Meys

Відповіді:


134

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

Засіб просте:

  1. Відкрийте файл
  2. Перейдіть до останнього рядка файлу
  3. Помістіть курсор на кінець цього рядка
  4. Натисніть return
  5. Збережіть файл

2
Це не останній рядок файлу. Це заголовок, який він читає, це ваші перші п’ять рядків.
Joris Meys

@JorisMeys Повідомлення про помилку стосується останнього рядка файлу. Виконання вищезазначених дій дійсно знімає попередження.
WorldGov

@WorldGov "неповний фінальний рядок" - це попередження (не помилка), яке може спливати через різні причини. У вашому випадку це відсутність остаточного EOL. У вашому випадку попередження не було викинуто функцією readTableHeader, оскільки це не читає остаточний рядок. Отже, ваша проблема не така, як у ОП.
Йоріс Мейс

20

Проблему легко вирішити; це тому, що останній рядок ПОВИНЕН бути порожнім.

Скажіть, якщо ваш вміст є

line 1,
line2

змінити його на

line 1,
line2
(empty line here)

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

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

; і я вирішую це моїм вищевказаним методом.


1
використання сантехніків для розміщення API R у мене була та сама проблема. Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'попередження було вирішено, додавши в кінці один порожній рядок. Не впевнений, чому це відбувається.
HoofarLotusX

Те ж саме. Дякую.
Мегадет

14

Ви дійсно впевнені, що вибрали файл .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()може легко впоратися з цим, і розпізнає порожні клітини просто чудово.


Якщо припустити, що це середовище Windows 7, якщо Кейт дивиться на файл або скопійований на робочий стіл або всередині папки, піктограма для .csv-файлу має "а", тоді як .xlsx-файл має значок, який виглядає більше як робочий аркуш. Це швидкий візуальний спосіб визначення типу файлу. Набагато простіше помітити, коли їх зберігають на робочому столі, оскільки значки більше. :)
Мішель

7

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

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

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

3

Я зрозумів, що було надано кілька відповідей, але реального виправлення ще не було.

Як зазначено вище, причина "Кінець рядка" відсутня в кінці файлу CSV.

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

Тим часом повідомте про помилку в Microsoft.

Питання: Мені здається, це проблема офісу 2016 року. У когось є проблема на ПК?


2

Я отримав те саме повідомлення. Моє виправлення включало: я видалив усі додаткові аркуші (вкладки) у файлі .csv, усунув нечислові символи, відновив файл як розділений комами та завантажив у R v 2.15.0 за допомогою стандартної мови:

filename <-read.csv ("ім'я файлу", заголовок = TRUE)

В якості додаткової гарантії я закрив програмне забезпечення і знову відкрив його перед завантаженням csv.


2

У різних європейських локалях, оскільки символ кома виступає в якості десяткової крапки, замість цього слід використовувати функцію read.csv2.


2

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


1

Проблема, яку ви описуєте, виникла у мене, коли я перейменований .xlsxяк " .csv.

Що для мене виправлено, було "Зберегти як", а потім знову зберегти його .csv.


1

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


1

Щоб вирішити цю проблему через R, я просто використав read.xlsx(..)замість read.csv(). Працює як шарм !! Вам навіть не потрібно перейменовувати. Перейменування xlsx в csv не є прийнятним рішенням.


#Digvijay_Sawant, не впевнений, що ти маєш на увазі під своїм останнім коментарем, але на відміну від будь-якого іншого рішення тут (я намагався майже всі вони: божевільні!), Твій був єдиним, хто працював.
W Баркер

1
@WBarker У оригіналі запитання автор зберег Excel у csv, а потім спробував його прочитати. Добре перетворення Excel у формат CSV може змінити такі речі, як формати даних, можлива втрата даних тощо. Excel може зберігати "кінець файлу" в іншому форматі, ніж у csv, що може ускладнити функцію розібратися, де закінчується файл. Ну я не фахівець, а лише думка :-)
Digvijay Sawant

0

Відкрийте файл у текстовому файле або блокноті ++ та покажіть форматування, наприклад, у текстовому виправнику, на якому ви показуєте невидимки. Таким чином ви можете бачити нові символи рядків або вкладок. Часто excel додасть усілякі вкладки в неправильних місцях, а не останній новий символ рядка, але вам потрібно показати символи, щоб це побачити.


0

Моя робота полягала в тому, що я відкрив csvфайл у текстовому редакторі, видалив зайві коми після останнього значення, а потім зберег файл. Наприклад для наступного файлу

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,

Видаліть коми через 6, а потім збережіть файл.


0

У мене виникла подібна проблема, однак це видається загальним попередженням і може насправді не пов’язано з символом рядка. У моєму випадку вона давала цю помилку, оскільки файл, який я використовував, містив символи кирилиці, як тільки я замінив їх латинськими символами, помилка зникла.


0

Я спробував різні рішення, як-от використання текстового редактора, щоб вставити новий рядок і отримати символ кінця рядка як рекомендовано у верхній відповіді вище. На жаль, жодне з них не спрацювало.

Рішення , яке було , нарешті , працювати для мене було дуже просто: я копіювати-вставити вміст файлу CSV в новий файл CSV порожній, зберегти його, і проблема зникла.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.