Bir .csv dosyasını R'ye okumaya çalışırken "Tamamlanmamış son satır" uyarısı


114

Bir .csv dosyasını R'ye okumaya çalışıyorum ve bu formülü kullanarak:

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

Bu uyarı mesajını alıyorum:

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

Bu uyarıya neden olabileceğini düşündüğüm birkaç şey var, ancak maalesef sorunu kendim teşhis etmek için R hakkında yeterince bilgim yok, bu yüzden başka birinin benim için teşhis edebileceği umuduyla buraya göndereceğimi düşündüm!

  • .csv dosyası aslında .csv biçiminde kaydettiğim bir Excel dosyasıydı
  • dosya üç veri sütunundan oluşur
  • her veri sütunu farklı uzunluktadır, yani her sütunda farklı sayıda değer vardır
  • Aynı anda iki sütunun ortalamalarını (normal / normal olmayan dağılıma bağlı olarak t-testi veya eşdeğeri kullanarak) karşılaştırmak istiyorum, bu nedenle örneğin, 1. sütun değerleri ile 2. sütun değerleri arasında t-testi, sonra bir t- 1. sütun ve 3. sütun değerlerinin testi vb.

Herhangi bir yardım veya öneri ciddiye alınacaktır!


1
@Kate: bizi dosyanın kendisine bağlayabilir misin? Bazı fikirlerim var, ancak dosya olmadan bunun hangi problem olduğunu söylemek zor.
Joris Meys

Merhaba Joris - Bunu nasıl yapacağımdan emin değilim, üzgünüm ...
Kate

İlk sütunun 1045 değeri, ikincisinin 623 değeri ve üçüncüsünün 871 değeri vardır, eğer yardımcı olursa ...? Hepsi tam ve yarım sayılardan oluşan sayısal değerlerdir, yani 23, 24.5 vb.
Kate

1
Sanırım sorun bu, çünkü read.table verilerinizi eşit sütun uzunluklarına sahip olması gereken bir veri çerçevesine koyuyor.
Sir Ksilem

1
@James: Hayır, değil. readTableHead (temeldeki c işlevi) ilk 5 satırı okur. Hata oradan kaynaklanıyor.
Joris Meys

Yanıtlar:


134

Mesaj, dosyanın son satırının Satır Sonu (EOL) karakteri (satır besleme ( \n) veya satır başı + satır besleme ( \r\n)) ile bitmediğini belirtir . Bu mesajın asıl amacı, sizi dosyanın eksik olabileceği konusunda uyarmaktı; çoğu veri dosyası, dosyadaki son karakter olarak bir EOL karakterine sahiptir.

Çözüm basit:

  1. Dosyayı aç
  2. Dosyanın en son satırına gidin
  3. İmleci o satırın sonuna getirin
  4. Basın return
  5. Dosya 'yı kaydet

2
Dosyanın son satırı değil. Okuduğu başlık, sizin ilk beş satırınız.
Joris Meys

@JorisMeys Hata mesajı, dosyanın son satırına işaret ediyor. Yukarıdaki adımları atmak gerçekten uyarıyı ortadan kaldırır.
WorldGov

@WorldGov "eksik son satır", farklı nedenlerden dolayı ortaya çıkabilen bir uyarıdır (bir hata değildir). Sizin durumunuzda bu, son bir EOL eksikliğidir. Sizin durumunuzda uyarının readTableHeader işlevi tarafından verilmesinin bir yolu yoktur, çünkü bu son satırı okumaz. Dolayısıyla sizin sorununuz OP'ninki ile aynı değildir.
Joris Meys

20

Sorunun çözülmesi kolaydır; çünkü son satır boş OLMALIDIR.

Diyelim ki içeriğiniz

line 1,
line2

olarak değiştir

line 1,
line2
(empty line here)

Bugün bir JSON dosyasını okumak için R'yi kullanmaya çalışırken aşağıdaki komutu kullanarak bu tür bir problemle karşılaştım:

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

; ve yukarıdaki yöntemimle çözüyorum.


1
bir R API barındırmak için tesisatçı kullanarak aynı sorunu yaşadım. Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'sonuna bir boş satır eklenerek uyarı giderildi. Bunun neden olduğundan emin değilim.
HoofarLotusX

Burada aynı. Teşekkürler.
Megadeth

14

.Xls dosyasını değil .csv dosyasını seçtiğinizden gerçekten emin misiniz? Hatayı yalnızca bir .xls dosyasında okumaya çalışırsam yeniden oluşturabilirim. Bir .csv dosyasında veya başka bir metin dosyasında okumaya çalışırsam, aldığınız hatayı yeniden oluşturmak imkansızdır.

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

readTableHeadhatayı veren c işlevidir. Verinin türünü belirlemek için ilk n satırı (standart ilk 5) okumaya çalışır. Verilerin geri kalanı kullanılarak okunur scan(). Yani sorun, dosyanın formatıdır.

Bulmanın bir yolu, çalışma dizinini dosyanın bulunduğu dizine ayarlamaktır. Bu şekilde okuduğunuz dosyanın uzantısını görürsünüz. Windows'ta bunun standart olarak gösterilmediğini biliyorum, bu yüzden csv olmadığına inanabilirsiniz.

Yapmanız gereken bir sonraki şey, dosyayı Not Defteri'nde veya Wordpad'de (veya başka bir düzenleyicide) açmak ve biçimin benim dosyamla eşdeğer olup olmadığını kontrol etmektir test.csv:

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

Bu dosya size aşağıdaki veri çerçevesini verecektir:

> 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 tarafından kaydedilen csv biçimi, tüm hücreleri virgülle ayırır. Boş hücrelerin bir değeri yoktur. read.table()bununla kolayca başa çıkabilir ve boş hücreleri gayet iyi tanır.


Bunun bir Windows 7 ortamı olduğunu varsayarsak, Kate masaüstüne veya klasörün içinde kopyalanan dosyaya bakarsa, .csv dosyası simgesinin üzerinde "a" bulunurken .xlsx dosyasında daha fazla görünen bir simge bulunur. bir çalışma sayfası gibi. Bu, dosya türünü belirlemenin hızlı bir görsel yoludur. Simgeler daha büyük olduğu için masaüstüne kaydedildiğinde görmek çok daha kolay. :)
Michelle

7

Önce dosyayı bir karakter vektörüne okumak için readLines()(with warn = FALSE) kullanın .

Bundan sonra text =vektörü bir veri çerçevesine okuma seçeneğini kullanın.read.table()

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

3

Birkaç yanıtın verildiğini ancak henüz gerçek bir düzeltme olmadığını fark ettim.

Bunun nedeni, yukarıda belirtildiği gibi, CSV dosyasının sonunda eksik olan "Satır sonu" dur.

Gerçek Düzeltmenin Microsoft'tan gelmesi gerekirken, dolaşmak CSV dosyasını bir Metin düzenleyiciyle açmak ve dosyanın sonuna bir satır eklemektir (diğer bir deyişle, dönüş tuşuna basın). ATOM yazılımını bir metin / kod düzenleyici olarak kullanıyorum, ancak hemen hemen tüm temel metin düzenleyicileri yapardı.

Bu arada, lütfen hatayı Microsoft'a bildirin.

Soru: Bana öyle geliyor ki bu bir ofis 2016 problemi. PC'de sorunu olan var mı?


2

Aynı mesajı aldım. Düzeltmem dahil: .csv dosyasındaki tüm ek sayfaları (sekmeleri) sildim, sayısal olmayan karakterleri ortadan kaldırdım, dosyayı virgülle ayrılmış olarak yeniden kaydettim ve standart dili kullanarak R v 2.15.0'a yükledim:

Dosya adı <-read.csv ( "Dosya adı", başlık = TRUE)

Ek bir güvenlik önlemi olarak, csv'yi yüklemeden önce yazılımı kapattım ve yeniden açtım.


2

Çeşitli Avrupa yerel ayarlarında, virgül karakteri ondalık nokta işlevi gördüğünden, bunun yerine read.csv2 işlevi kullanılmalıdır.


2

Bu sorunu read.table argümanındaki kodlamayı fileEncoding = "UTF-16" dan fileEncoding = "UTF-8" e değiştirerek çözdüm.


1

Tanımladığınız sorun, a'yı .xlsxolarak yeniden adlandırdığımda benim için ortaya çıktı .csv.

Benim için düzelten şey, "Farklı Kaydet" seçeneğine gidip onu .csvyeniden kaydetmekti .


1

Başlığın bir parçası olarak tek bir alıntı aldığımda bu sorunu bir kez yaşadım. I (örneğin, gelen ilgili sütun başlığı değiştirildi kaldırılır zaman Jimmy's dataiçin Jimmys data), fonksiyon bir uyarı döndü.


1

Bu sorunu R'nin kendisi aracılığıyla düzeltmek için, sadece read.xlsx(..)a yerine read.csv(). Tıkır tıkır çalışıyor!! Yeniden adlandırmanıza bile gerek yok. Bir xlsx'i csv olarak yeniden adlandırmak uygun bir çözüm değildir.


#Digvijay_Sawant, son yorumunuzla ne demek istediğinizden emin değilim, ancak buradaki diğer tüm çözümlerin aksine (neredeyse hepsini denedim: çıldırtmak!), İşe yarayan tek çözüm sizindi.
W Barker

1
@WBarker Orijinal soruda yazar Excel'i bir csv'ye kaydetti ve sonra okumaya çalıştı. Bir excel'i csv'ye dönüştürmek, veri formatları gibi şeyleri değiştirebilir, veri kaybı meydana gelebilir vb. Excel, bir csv'den farklı bir formatta "dosya sonu" depolayabilir ve bu da işlevi dosyanın nerede bittiğini anlamayı zorlaştırabilir. Uzman değilim ama sadece bir düşüncem :-)
Digvijay Sawant

0

Dosyayı text wrangler veya notepad ++ ile açın ve biçimlendirmeyi gösterin, örneğin görünmezleri gösterdiğiniz metin düzenleyicide. Bu şekilde yeni satırı veya sekme karakterlerini görebilirsiniz. Excel genellikle her türden sekmeyi yanlış yerlere ekler ve son bir yeni satır karakteri değil, ancak bunu görmek için sembolleri göstermeniz gerekir.


0

Çalışmam, csvdosyayı bir metin düzenleyicide açmam, son değerdeki aşırı virgülleri kaldırmam ve ardından dosyayı kaydetmemdi. Örneğin aşağıdaki dosya için

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

6'dan sonra virgülleri kaldırın, ardından dosyayı kaydedin.


0

Benzer bir sorunla karşılaştım, ancak bu genel bir uyarı gibi görünüyor ve aslında satır sonu karakteriyle ilgili olmayabilir. Benim durumumda bu hatayı veriyordu çünkü kullandığım dosya Kiril karakterleri içeriyordu, onları latin karakterlerle değiştirdiğimde hata ortadan kalktı.


0

Yeni bir satır eklemek için bir metin düzenleyici kullanmak ve yukarıdaki en üst yanıtta önerildiği gibi Satır Sonu karakterini almak gibi farklı çözümler denedim . Maalesef bunların hiçbiri işe yaramadı.

Sonunda işe yaramadı çözüm benim için çok basitti: Ben, yeni bir boş CSV dosyası olarak CSV dosyasının içeriğini-yapıştırılan kopya onu kurtardı ve sorun gitmişti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.