R में .csv फ़ाइल को पढ़ने का प्रयास करते समय 'अधूरी अंतिम पंक्ति' चेतावनी


114

मैं R में .csv फ़ाइल पढ़ने की कोशिश कर रहा हूँ और इस सूत्र का उपयोग कर रहा हूँ:

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

मुझे यह चेतावनी संदेश मिला है:

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

ऐसी कुछ चीज़ें हैं जिनके बारे में मुझे लगा कि यह चेतावनी हो सकती है, लेकिन दुर्भाग्य से मुझे इस समस्या का निदान करने के लिए R के बारे में पर्याप्त जानकारी नहीं है, इसलिए मैंने सोचा कि मैं यहाँ पोस्ट करूँगा, कोई और मेरे लिए इसका निदान कर सकता है!

  • .csv फ़ाइल मूल रूप से एक एक्सेल फ़ाइल थी, जिसे मैंने .csv प्रारूप में सहेजा था
  • फ़ाइल में डेटा के तीन कॉलम शामिल हैं
  • प्रत्येक डेटा कॉलम एक अलग लंबाई का होता है, अर्थात प्रत्येक कॉलम में भिन्न मान होते हैं
  • मैं एक समय में दो स्तंभों के साधनों की तुलना करना चाहता हूं (टी-टेस्ट या सामान्य के आधार पर / सामान्य वितरण के आधार पर), इसलिए उदाहरण के लिए, कॉलम 1 मान और कॉलम 2 मान के बीच टी-टेस्ट, फिर एक टी- कॉलम 1 और कॉलम 3 मानों का परीक्षण, आदि।

किसी भी मदद या सुझाव गंभीरता से सराहना की जाएगी!


1
@ केट: क्या आप हमें फ़ाइल से लिंक कर सकते हैं? मेरे पास कुछ विचार हैं, लेकिन यह कहना मुश्किल है कि यह फ़ाइल किस समस्या के बिना है।
जोरिस मेयस

हाय जोरिस - मुझे यकीन नहीं है कि कैसे करना है, माफ करना ...
केट

पहले कॉलम में 1045 मान हैं, दूसरे में 623 मान हैं और तीसरे में 871 हैं यदि यह मदद करता है ...? वे पूरे और आधे संख्याओं में सभी संख्यात्मक मान हैं, अर्थात 23, 24.5 आदि ...
केट

1
मुझे लगता है कि यह समस्या है, क्योंकि read.table आपके डेटा को एक डेटा फ़्रेम में रखता है, जिसके लिए समान स्तंभकार होना आवश्यक है।
सर कासिलम

1
@ नाम: नहींं, यह नहीं है। readTableHead (अंतर्निहित c फ़ंक्शन) पहले 5 लाइनों को पढ़ता है। त्रुटि वहीं उत्पन्न होती है।
जोरिस

जवाबों:


134

संदेश इंगित करता है कि फ़ाइल की अंतिम पंक्ति एंड ऑफ़ लाइन (ईओएल) वर्ण (लाइनफ़ीड \n) ( या कैरिज रिटर्न + लाइनफ़ीड ( \r\n)) के साथ समाप्त नहीं होती है । इस संदेश का मूल उद्देश्य आपको चेतावनी देना था कि फ़ाइल अधूरी हो सकती है; अधिकांश डेटाफ़ाइल्स में फ़ाइल में अंतिम वर्ण के रूप में EOL वर्ण होता है।

उपाय सरल है:

  1. फ़ाइल खोलें
  2. फ़ाइल की बहुत अंतिम पंक्ति पर नेविगेट करें
  3. कर्सर को उस रेखा के अंत में रखें
  4. दबाएँ return
  5. फ़ाइल सहेजें

2
यह फ़ाइल की अंतिम पंक्ति नहीं है। यह वह हेडर है जिसे वह पढ़ रहा है, जो आपकी पहली पाँच पंक्तियाँ हैं।
जोरिस मेस

@JorisMeys त्रुटि संदेश, हालांकि, फ़ाइल की अंतिम पंक्ति को संदर्भित करता है। उपरोक्त चरणों को लेना वास्तव में चेतावनी को हटा देता है।
वर्ल्डगोव

@WorldGov "अधूरी अंतिम पंक्ति" एक चेतावनी है (एक त्रुटि नहीं) जो विभिन्न कारणों के कारण पॉप अप हो सकती है। आपके मामले में यह एक अंतिम ईओएल की कमी है। ऐसा कोई तरीका नहीं है कि आपके मामले में चेतावनी को readTableHeader फ़ंक्शन द्वारा फेंक दिया गया था, क्योंकि कोई अंतिम पंक्ति नहीं पढ़ता है। इसलिए आपकी समस्या ओपी जैसी नहीं है।
जोरिस

20

समस्या को हल करना आसान है; यह इसलिए है क्योंकि अंतिम पंक्ति खाली होनी चाहिए।

कहो, अगर आपकी सामग्री है

line 1,
line2

इसे बदलो

line 1,
line2
(empty line here)

आज मैं इस तरह की समस्या से मिला, जब मैं नीचे कमांड का उपयोग करके JSON फ़ाइल को पढ़ने के लिए R का उपयोग करने का प्रयास कर रहा था:

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

; और मैं इसे अपने उपरोक्त विधि से हल करता हूं।


1
आर एपीआई की मेजबानी के लिए प्लंबर का उपयोग करना मेरे पास एक ही मुद्दा था। 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सी-फंक्शन है जो त्रुटि देता है। यह डेटा के प्रकार को निर्धारित करने के लिए पहली n लाइनों (पहले 5 मानक) में पढ़ने की कोशिश करता है। शेष डेटा का उपयोग करने में पढ़ा जाता है scan()। तो समस्या फ़ाइल का प्रारूप है।

पता लगाने का एक तरीका यह है कि वर्किंग डायरेक्टरी को उस डायरेक्टरी में सेट करना है जहाँ फ़ाइल है। इस तरह से आप अपने द्वारा पढ़ी गई फ़ाइल का विस्तार देख सकते हैं। मुझे पता है कि विंडोज पर यह मानक नहीं दिखाया गया है, इसलिए आप विश्वास कर सकते हैं कि यह सीएसवी है, जबकि यह नहीं है।

अगली चीज़ जो आपको करनी चाहिए, वह फ़ाइल को नोटपैड या वर्डपैड (या किसी अन्य संपादक) में खोलें और जांचें कि प्रारूप मेरी फ़ाइल के बराबर है 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

एक्सेल द्वारा सहेजे गए सीएसवी प्रारूप सभी कोशिकाओं को अल्पविराम से अलग करता है। खाली कक्षों का सिर्फ एक मूल्य नहीं है। read.table()इससे आसानी से निपट सकते हैं, और खाली कोशिकाओं को ठीक पहचानते हैं।


यह मानते हुए कि यह एक विंडोज 7 वातावरण है, यदि केट डेस्कटॉप पर या फ़ोल्डर के अंदर कॉपी की गई फ़ाइल को देखता है, तो .csv फ़ाइल के लिए आइकन पर "a" है, जबकि .xlsx फ़ाइल में एक आइकन है जो अधिक दिखता है। वर्कशीट की तरह। यह फ़ाइल प्रकार का निर्धारण करने का एक त्वरित दृश्य तरीका है। जब डेस्कटॉप बड़े होते हैं तो डेस्कटॉप पर सहेजे जाने के बाद देखने में बहुत आसान होता है। :)
मिशेल

7

फ़ाइल को पहले चरित्र वेक्टर में पढ़ने के लिए readLines()(के साथ warn = FALSE) का उपयोग करें ।

उसके बाद text =वेक्टर को डेटा फ्रेम में पढ़ने के लिए विकल्प का उपयोग करेंread.table()

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

3

मैंने महसूस किया कि कई उत्तर दिए गए हैं लेकिन अभी तक कोई वास्तविक समाधान नहीं है।

कारण, जैसा कि ऊपर बताया गया है, CSV फ़ाइल के अंत में एक "लाइन ऑफ़ एंड" गायब है।

जबकि असली फिक्स Microsoft से आना चाहिए, चारों ओर चलना पाठ संपादक के साथ CSV फ़ाइल को खोलने और फ़ाइल के अंत में एक पंक्ति जोड़ने के लिए है (उर्फ प्रेस वापसी कुंजी)। मैं एक पाठ / कोड संपादक के रूप में ATOM सॉफ्टवेयर का उपयोग करता हूं, लेकिन लगभग सभी मूल पाठ संपादक करेंगे।

इस बीच, कृपया बग को Microsoft को रिपोर्ट करें।

प्रश्न: मुझे ऐसा लगता है कि यह कार्यालय 2016 की समस्या है। क्या किसी को पीसी पर समस्या है?


2

मुझे भी यही संदेश मिला। मेरी फिक्स में शामिल हैं: मैंने .csv फ़ाइल में सभी अतिरिक्त शीट (टैब) को हटा दिया, गैर-संख्यात्मक वर्णों को समाप्त कर दिया, फ़ाइल को कॉमा सीमांकित के रूप में फिर से शुरू किया और मानक भाषा का उपयोग करते हुए R v 2.15.0 में लोड किया:

फ़ाइल नाम <-read.csv ( "फ़ाइल नाम", हेडर = TRUE)

एक अतिरिक्त सुरक्षा के रूप में, मैंने सॉफ्टवेयर को बंद कर दिया और सीएसवी को लोड करने से पहले फिर से खोल दिया।


2

विभिन्न यूरोपीय स्थानों में, जैसा कि अल्पविराम चरित्र दशमलव बिंदु के रूप में कार्य करता है, इसके बजाय read.csv2 फ़ंक्शन का उपयोग किया जाना चाहिए।


2

मैंने इस समस्या को फ़ाइल में एन्कोडिंग से बदल दिया है। फ़ाइल से तर्क में तर्क करना = "UTF-16" को fileEncoding = "UTF-8" में बदलना।


1

जब मैं वर्णन कर रहा था तो मेरे द्वारा बताई गई समस्या का नाम बदल .xlsxगया था .csv

मेरे लिए यह तय था कि "सेव अस" चल रहा है और फिर इसे एक .csvबार फिर से सहेजा जा रहा है ।


1

मुझे यह समस्या एक बार मिली जब मैंने हेडर के हिस्से के रूप में एक ही उद्धरण दिया था। जब मैं इसे हटा दिया (यानी से संबंधित स्तंभ शीर्ष लेख का नाम बदला Jimmy's dataकरने के लिए Jimmys data), समारोह कोई चेतावनी लौट आए।


1

R के माध्यम से इस समस्या को ठीक करने के लिए, मैं सिर्फ read.xlsx(..)एक के बजाय इस्तेमाल किया read.csv()। एक जादू की तरह काम करता है!! आपको नाम बदलना भी नहीं है। Csv में xlsx का नाम बदलना एक व्यवहार्य समाधान नहीं है।


#Digvijay_Sawant, यह निश्चित नहीं है कि आपकी अंतिम टिप्पणी का क्या मतलब है, लेकिन यहां हर दूसरे समाधान के विपरीत (मैंने लगभग सभी की कोशिश की: पागल!), आपका केवल एक ही काम था।
डब्ल्यू बार्कर

1
@Barker मूल प्रश्न लेखक ने एक्सेल को एक सीएसवी में सहेजा और फिर उसे पढ़ने की कोशिश की। अच्छी तरह से सीएसएल के लिए एक एक्सेल को परिवर्तित करने से डेटा प्रारूप जैसी चीजें बदल सकती हैं, डेटा का नुकसान हो सकता है आदि। एक्सेल एक "से फ़ाइल का अंत" को एक अलग प्रारूप में संग्रहीत कर सकता है एक सीएसवी की तुलना में जहां फ़ाइल समाप्त होने पर फ़ंक्शन का पता लगाना मुश्किल हो सकता है। वैसे मैं कोई विशेषज्ञ नहीं हूं, लेकिन सिर्फ एक विचार :-)
दिग्विजय सावंत

0

फ़ाइल को टेक्स्ट रैंगलर या नोटपैड ++ में खोलें और फॉर्मेटिंग उदाहरण दिखाएं जैसे टेक्स्ट रैंगलर में आप इन्विसिबल्स दिखाते हैं। इस तरह आप नई लाइन या टैब वर्ण देख सकते हैं। अक्सर एक्सेल गलत स्थानों पर सभी प्रकार के टैब जोड़ देगा और अंतिम नई लाइन वर्ण नहीं होगी, लेकिन इसे देखने के लिए आपको प्रतीकों को दिखाने की आवश्यकता है।


0

आसपास मेरा काम यह था कि मैंने csvएक पाठ संपादक में फ़ाइल खोली , अंतिम मान पर अत्यधिक कॉमा को हटा दिया, फिर फ़ाइल को सहेजा। निम्न फ़ाइल के लिए उदाहरण के लिए

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

6 के बाद कॉमा निकालें, फिर फ़ाइल को सहेजें।


0

मैंने एक समान समस्या का अनुभव किया है, हालांकि यह एक सामान्य चेतावनी के लिए प्रकट होता है, और वास्तव में लाइन-एंड चरित्र से संबंधित नहीं हो सकता है। मेरे मामले में यह त्रुटि दे रहा था क्योंकि मैं जिस फ़ाइल में सिरिलिक वर्णों का उपयोग कर रहा था, एक बार जब मैंने उन्हें लैटिन वर्णों के साथ बदल दिया तो त्रुटि गायब हो गई।


0

मैंने विभिन्न समाधानों की कोशिश की, जैसे कि एक पाठ संपादक का उपयोग करके एक नई पंक्ति सम्मिलित करना और ऊपर दिए गए शीर्ष उत्तर में सुझाए गए अनुसार पंक्ति का अंत प्राप्त करना । इनमें से कोई भी काम नहीं किया, दुर्भाग्य से।

अंत में मेरे लिए काम करने वाला समाधान बहुत सरल था: मैंने एक सीएसवी फ़ाइल की सामग्री को एक नई रिक्त CSV फ़ाइल में कॉपी-पेस्ट किया, इसे सहेजा और समस्या दूर हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.