Peringatan 'Baris terakhir tidak lengkap' saat mencoba membaca file .csv menjadi R

114

Saya mencoba membaca file .csv menjadi R dan setelah menggunakan rumus ini:

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

Saya mendapatkan pesan peringatan ini:

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

Ada beberapa hal yang menurut saya mungkin menyebabkan peringatan ini, tetapi sayangnya saya tidak cukup tahu tentang R untuk mendiagnosis masalahnya sendiri, jadi saya pikir saya akan memposting di sini dengan harapan orang lain dapat mendiagnosisnya untuk saya!

  • file .csv aslinya adalah file Excel, yang saya simpan ke dalam format .csv
  • file tersebut terdiri dari tiga kolom data
  • setiap kolom data memiliki panjang yang berbeda, yaitu terdapat jumlah nilai yang berbeda di setiap kolom
  • Saya ingin membandingkan rata-rata (menggunakan uji-t atau ekuivalen tergantung pada distribusi normal / tidak normal) dari dua kolom sekaligus, jadi misalnya, uji-t antara nilai kolom 1 dan nilai kolom 2, lalu t- uji nilai kolom 1 dan kolom 3, dll.

Bantuan atau saran apa pun akan sangat dihargai!

Kate
sumber
1
@ Kate: dapatkah Anda menautkan kami ke file itu sendiri? Saya punya beberapa ide, tetapi sulit untuk mengatakan masalahnya tanpa memiliki file.
Joris Meys
Hai Joris - Saya tidak yakin bagaimana melakukannya, maaf ...
Kate
Kolom pertama memiliki 1045 nilai, yang kedua memiliki nilai 623 dan yang ketiga memiliki 871 jika itu membantu ...? Mereka semua adalah nilai numerik dalam bilangan bulat dan setengah, yaitu 23, 24,5 dll ...
Kate
1
saya pikir itulah masalahnya, karena read.table menempatkan data Anda dalam bingkai data, yang harus memiliki panjang kolom yang sama.
Sir Ksilem
1
@ James: Tidak, tidak. readTableHead (fungsi c yang mendasari) membaca 5 baris pertama. Kesalahannya berasal dari sana.
Joris Meys

Jawaban:

134

Pesan tersebut menunjukkan bahwa baris terakhir file tidak diakhiri dengan karakter End Of Line (EOL) (linefeed ( \n) atau carriage return + linefeed ( \r\n)). Maksud asli dari pesan ini adalah untuk memperingatkan Anda bahwa file tersebut mungkin tidak lengkap; kebanyakan file data memiliki karakter EOL sebagai karakter terakhir dalam file.

Obatnya sederhana:

  1. Buka file
  2. Arahkan ke baris terakhir file
  3. Tempatkan kursor di akhir baris itu
  4. tekan return
  5. Simpan file
Hendrik Pon
sumber
2
Ini bukan baris terakhir file. Itu adalah tajuk yang dia baca, yang merupakan lima baris pertama Anda.
Joris Meys
@ JorisMeys Pesan kesalahan, bagaimanapun, mengacu pada baris terakhir file. Mengambil langkah di atas memang menghilangkan peringatan.
WorldGov
@WorldGov "baris terakhir yang tidak lengkap" adalah peringatan (bukan kesalahan) yang dapat muncul karena penyebab yang berbeda. Dalam kasus Anda, itulah kurangnya EOL akhir. Tidak mungkin dalam kasus Anda peringatan dilemparkan oleh fungsi readTableHeader, karena itu tidak membaca baris terakhir. Karenanya masalah Anda tidak sama dengan OP.
Joris Meys
20

Masalahnya mudah dipecahkan; itu karena baris terakhir HARUS kosong.

Katakanlah, jika konten Anda

line 1,
line2

ubah menjadi

line 1,
line2
(empty line here)

Hari ini saya menemui masalah seperti ini, ketika saya mencoba menggunakan R untuk membaca file JSON, dengan menggunakan perintah di bawah ini:

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

; dan saya menyelesaikannya dengan metode saya di atas.

Vincent Jia
sumber
1
menggunakan tukang ledeng untuk hosting R API Saya memiliki masalah yang sama. Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'peringatan diselesaikan dengan menambahkan satu baris kosong pada akhirnya. Tidak yakin mengapa ini terjadi.
HoofarLotusX
Sama disini. Terima kasih.
Megadeth
14

Apakah Anda yakin telah memilih file .csv dan bukan file .xls? Saya hanya dapat mereproduksi kesalahan jika saya mencoba membaca dalam file .xls. Jika saya mencoba membaca dalam file .csv atau file teks lainnya, tidak mungkin membuat ulang kesalahan yang Anda dapatkan.

> 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'

readTableHeadadalah fungsi-c yang memberikan kesalahan. Ia mencoba membaca di n baris pertama (standar 5 yang pertama) untuk menentukan jenis data. Sisa data dibaca dengan menggunakan scan(). Jadi masalahnya adalah format file tersebut.

Salah satu cara untuk mengetahuinya, adalah mengatur direktori kerja ke direktori tempat file tersebut berada. Dengan cara itu Anda melihat ekstensi dari file yang Anda baca. Saya tahu di Windows itu tidak ditampilkan standar, jadi Anda mungkin percaya itu csv padahal tidak.

Hal berikutnya yang harus Anda lakukan, buka file di Notepad atau Wordpad (atau editor lain) dan periksa apakah formatnya setara dengan file saya test.csv:

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

File ini akan memberi Anda dataframe berikut:

> 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

Format csv yang disimpan oleh excel memisahkan semua sel dengan koma. Sel kosong tidak memiliki nilai. read.table()dapat dengan mudah menangani ini, dan mengenali sel kosong dengan baik.

Joris Meys
sumber
Dengan asumsi ini adalah lingkungan Windows 7, jika Kate melihat file tersebut disalin ke desktop atau di dalam folder, ikon untuk file .csv memiliki "a" di atasnya, sedangkan file .xlsx memiliki ikon yang lebih terlihat. seperti lembar kerja. Ini adalah cara visual cepat untuk menentukan jenis file. Jauh lebih mudah dilihat saat disimpan ke desktop karena ikonnya lebih besar. :)
Michelle
7

Gunakan readLines()(dengan warn = FALSE) untuk membaca file menjadi vektor karakter terlebih dahulu.

Setelah itu gunakan text =opsi untuk membaca vektor menjadi bingkai data denganread.table()

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

Saya menyadari bahwa beberapa jawaban telah diberikan tetapi belum ada perbaikan yang nyata.

Alasannya, seperti yang disebutkan di atas, adalah "Akhir baris" yang hilang di akhir file CSV.

Sementara Fix yang sebenarnya harus datang dari Microsoft, cara berjalannya adalah membuka file CSV dengan Text-editor dan menambahkan baris di akhir file (alias tekan tombol kembali). Saya menggunakan perangkat lunak ATOM sebagai editor teks / kode tetapi hampir semua editor teks dasar akan melakukannya.

Sementara itu, laporkan bug tersebut ke Microsoft.

Pertanyaan: Menurut saya ini adalah masalah kantor 2016. Apakah ada yang punya masalah di PC?

Nicolas Stifani
sumber
2

Saya menerima pesan yang sama. Perbaikan saya termasuk: Saya menghapus semua lembar tambahan (tab) di file .csv, menghilangkan karakter non-numerik, menyimpan ulang file sebagai dipisahkan koma dan dimuat di R v 2.15.0 menggunakan bahasa standar:

namafile <-read.csv ("namafile", header = TRUE)

Sebagai pengaman tambahan, saya menutup perangkat lunak dan membuka kembali sebelum saya memuat csv.

erik
sumber
2

Di berbagai lokal Eropa, karena karakter koma berfungsi sebagai titik desimal, fungsi read.csv2 harus digunakan sebagai gantinya.

yifan
sumber
2

Saya telah memecahkan masalah ini dengan mengubah pengkodean dalam argumen read.table dari fileEncoding = "UTF-16" menjadi fileEncoding = "UTF-8".

Dejan Pljevljakusic
sumber
1

Masalah yang Anda menggambarkan terjadi bagi saya ketika saya berganti nama sebuah .xlsxsebagai .csv.

Apa yang memperbaikinya untuk saya adalah "Simpan Sebagai" dan kemudian menyimpannya sebagai .csvlagi.

Jase
sumber
1

Saya mendapat masalah ini sekali ketika saya memiliki satu kutipan sebagai bagian dari tajuk. Ketika saya menghapusnya (yaitu mengganti nama tajuk kolom masing-masing dari Jimmy's datamenjadi Jimmys data), fungsi tersebut tidak mengembalikan peringatan.

loukdelouk
sumber
1

Untuk memperbaiki masalah ini melalui R itu sendiri, saya hanya menggunakan read.xlsx(..)sebagai pengganti file read.csv(). Bekerja seperti pesona !! Anda bahkan tidak perlu mengganti nama. Mengganti nama xlsx menjadi csv bukanlah solusi yang layak.

Digvijay Sawant
sumber
#Digvijay_Sawant, tidak yakin apa yang Anda maksud dengan komentar terakhir Anda, tetapi tidak seperti setiap solusi lain di sini (saya mencoba hampir semuanya: menjengkelkan!), Anda adalah satu-satunya yang berhasil.
W Barker
1
@WBarker Dalam pertanyaan awal, penulis menyimpan Excel ke dalam csv dan kemudian mencoba membacanya. Mengonversi excel ke csv dengan baik mungkin mengubah hal-hal seperti format data, kehilangan data mungkin terjadi, dll. Excel mungkin menyimpan "akhir file" dalam format yang berbeda dari csv yang mungkin membuat fungsi sulit untuk mengetahui di mana file berakhir. Yah saya bukan ahli tetapi hanya sebuah pemikiran :-)
Digvijay Sawant
0

Buka file di pengatur teks atau notepad ++ dan tunjukkan pemformatannya, misalnya di pengatur teks yang Anda tampilkan tidak terlihat. Dengan begitu Anda dapat melihat karakter baris atau tab baru. Seringkali excel akan menambahkan semua jenis tab di tempat yang salah dan bukan karakter baris baru terakhir, tetapi Anda perlu menunjukkan simbol untuk melihatnya.

prepagam
sumber
0

Pekerjaan saya adalah membuka csvfile di editor teks, menghapus koma yang berlebihan pada nilai terakhir, lalu menyimpan file tersebut. Misalnya untuk file berikut

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

Hapus koma setelah 6, lalu simpan file.

Chase Wright
sumber
0

Saya pernah mengalami masalah yang serupa, namun ini tampaknya peringatan umum, dan mungkin sebenarnya tidak terkait dengan karakter akhir baris. Dalam kasus saya itu memberikan kesalahan ini karena file yang saya gunakan berisi karakter Cyrillic, setelah saya menggantinya dengan karakter latin kesalahan tersebut menghilang.

Imer Muhović
sumber
0

Saya mencoba solusi yang berbeda, seperti menggunakan editor teks untuk menyisipkan baris baru dan mendapatkan karakter End Of Line seperti yang direkomendasikan dalam jawaban atas di atas. Sayangnya, tidak ada yang berhasil.

The solusi yang tidak akhirnya bekerja bagi saya adalah sangat sederhana: Saya menyalin-disisipkan isi dari file CSV ke file kosong CSV baru, disimpan, dan masalah itu pergi.

Rens
sumber