2013-05-30 8 views
20

में मैं एक .csv फ़ाइल है, जो निम्नलिखित डेटा होता है नहीं पढ़ सकता।यूनिकोड .csv आर

d <- read.csv("./Data/1.csv", fileEncoding="UTF-8") 
head(d) 

उत्पादन निम्नलिखित:

> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8") 
Warning messages: 
1: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    invalid input found on input connection './Data/1.csv' 
2: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    incomplete final line found by readTableHeader on './Data/1.csv' 
> head(d) 
[1] X. 
<0 rows> (or 0-length row.names) 

इस बीच, fileEncoding निर्दिष्ट किए बिना ही कर का उत्पादन इस:

> d <- read.csv("./Data/1.csv") 
> head(d) 
    Ô. Ô² 
1 1 10 
2 2 20 

जब मैं "फाइल" चलाने उपयोगिता बाहर एन्कोडिंग को खोजने के लिए फ़ाइल का, यह कहता है कि यह यूटीएफ -8 है:

Data\1.csv: UTF-8 Unicode text, with CRLF line terminators 

मैं आरस्टूडियो, विंडोज 7, आर संस्करण 2.15.2, 32-बिट का उपयोग कर रहा हूं।

अग्रिम धन्यवाद।

+0

लिनक्स पर आर 2.15.3 के साथ मेरे लिए पूरी तरह से काम करता है। (दूसरी चेतावनी शायद फाइल की आखिरी पंक्ति पर सिर्फ एक गायब "प्रविष्टि" है) – Spacedman

+4

मैं इस मुद्दे को दोहरा सकता हूं। मैंने कभी भी इन पैराम का उपयोग नहीं किया है, बल्कि 'एन्कोडिंग' का उपयोग करके, यानी 'read.csv (..., एन्कोडिंग = "यूटीएफ -8") फ़ाइल में पढ़ता है लेकिन हेडर अक्षरों के रूप में नहीं दिखाया जाता है, लेकिन ' XUFEFF..U.0531। X.U.0532.' इसके बजाए। – eddi

+1

एक अवलोकन: '> ए =" Ա "; > ए; [1] "Ա" 'ठीक काम करता है, लेकिन यह नहीं करता:' data.frame (ए); # # 1 ' – eddi

उत्तर

0

मैंने आपकी समस्या को दोहराने के दो तरीकों की कोशिश की।

मैं RStudio में ऊपर पात्रों की नकल की, इस कोड के साथ एक csv करने के लिए इसे बचाया:

write.csv(c("Ա","Բ", 
      1,10, 
      2,20), "test.csv") 

df <- read.csv("test.csv") 

यह ठीक काम किया।

तब मैंने सोचा, शायद आर धोखा दे रहा है जब मैं इसे आर के साथ सीएसवी में सहेजता हूं? इसलिए मैंने अक्षरों को एक टेक्स्ट फ़ाइल में चिपकाया और इसे सीएसवी के रूप में सहेज लिया। इस दृष्टिकोण में या तो समस्या नहीं है।

sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_CA.UTF-8  LC_NUMERIC=C    LC_TIME=en_CA.UTF-8  
[4] LC_COLLATE=en_CA.UTF-8  LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     LC_ADDRESS=C    
[10] LC_TELEPHONE=C    LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats4 grid  stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] party_1.0-9  modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10 zoo_1.7-10  
[6] GGally_0.4.4  reshape_0.8.4  plyr_1.8   ggplot2_0.9.3.1 

loaded via a namespace (and not attached): 
[1] coin_1.0-23  colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3  
[5] gtable_0.1.2  labeling_0.2  lattice_0.20-23 MASS_7.3-29  
[9] munsell_0.4.2  mvtnorm_0.9-9995 proto_0.3-10  RColorBrewer_1.0-5 
[13] reshape2_1.2.2  scales_0.2.3  splines_3.0.1  stringr_0.6.2 
0

मैं एक ही समस्या थी और पता चला कि फ़ाइल दूषित किया गया था:

यहाँ मेरी सत्र जानकारी है।

मैं OpenOffice के साथ फाइल खोली और (आप क्लिक करने के लिए संपादित करें फ़िल्टर सेटिंग्स बॉक्स की जरूरत है) "UTF8" वर्ण सेट का उपयोग इसे वापस बचाया और फिर read.csv() (कोई एन्कोडिंग या filencoding विकल्प) के साथ इसे आयात किया है और यह ठीक काम किया।

11

मैंने यहां एक ही मुद्दे पर एक लंबा उत्तर लिखा: R on Windows: character encoding hell

फ़ाइल के बजाय पैरामीटर एन्कोडिंग का उपयोग करके त्वरित उत्तर, एन्कोडिंग को अपना पहला अंक ठीक करना चाहिए। आप संभवतः RStudio में कंसोल या टेबल व्यू में इसे पढ़ने में सक्षम नहीं होंगे, लेकिन आप इसे सूत्रों में उपयोग करने में सक्षम होंगे।

> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8") 
Warning message: 
In read.table(file = file, header = header, sep = sep, quote = quote, : 
    incomplete final line found by readTableHeader on 'test2.csv' 

यह आपको देता है कि यह कैसे सांत्वना और RStudio ध्यान में रखते हुए की तरह लग रहा

> test2 
     V1  V2 
1 <U+0531> <U+0532> 
2  1  10 
3  2  20 

हालांकि महत्वपूर्ण बात आप कर सकते हैं:

d <- read.csv("./Data/1.csv", encoding="UTF-8") 
head(d) 

एक UTF-8 फ़ाइल में अपनी मेज बचाया करने के बाद आर के भीतर इसे कुशल बनाने के लिए। इस प्रकार मेरे मामले में यह देखना संभव है कि स्क्रिप्ट विंडो इनपुट Ա में यूटीएफ -8 एन्कोडिंग है, और एक grep सही ढंग से आपकी तालिका में यह एन्कोडिंग पाता है।

> Encoding("Ա") 
[1] "UTF-8" 
> grep("Ա", as.character(test2[1,1])) 
[1] 1 

आपको उपयुक्त सेटिंग्स एन्कोडिंग वेरिएंट ढूंढने की आवश्यकता हो सकती है जो आपकी सेटिंग्स पर काम करते हैं, या संभवतः उन्हें बदलते हैं। दुर्भाग्य से मुझे यकीन नहीं है कि यह कहां किया जाता है।

हो सकता है कि आप इसे सभी चरणों में सुंदर बनाने में सक्षम न हों, लेकिन यह विंडोज 7 पर्यावरण में भी काम करने के लिए निश्चित रूप से संभव है।