2013-01-16 13 views
27

में अमान्य मल्टीबाइट स्ट्रिंग मैं जापानी में एक सीएसवी आयात करने की कोशिश कर रहा हूं। यह कोड:read.csv

url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv' 
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE) 

निम्नलिखित त्रुटि देता है:

Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : 
invalid multibyte string at '<91>ΊO<8b>y<82>ёΓ<e0><8f>،<94><94><84><94><83><8c>_<96>̏@(<8f>T<8e><9f><81>E<8e>w<92><e8><95>@<8a>փx<81>[<83>X<81>j' 

मैं एन्कोडिंग (Encoding(url) <- 'UTF-8' और भी latin1 करने के लिए) को बदलने की कोशिश की और read.csv मापदंडों को दूर करने की कोशिश की, लेकिन एक ही "अवैध multibyte प्राप्त प्रत्येक मामले में स्ट्रिंग "संदेश। क्या कोई अलग एन्कोडिंग है जिसका प्रयोग किया जाना चाहिए, या क्या कोई अन्य समस्या है?

+0

से अपग्रेड किया गया तो क्या यह समस्या गायब हो गई है क्या आपने तर्क 'एन्कोडिंग = "यूटीएफ -8" 'to read.sv()' को सेट करने का प्रयास किया है? – Andrie

+0

हां, एक ही परिणाम के साथ। – jaredwoodard

उत्तर

54

Encoding एक वर्ण स्ट्रिंग के एन्कोडिंग सेट करता है। यह वर्ण स्ट्रिंग द्वारा प्रस्तुत फ़ाइल के एन्कोडिंग को सेट नहीं करता है, जो आप चाहते हैं।

यह मेरे लिए काम किया, "UTF-8" कोशिश कर के बाद:

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1") 

और आप पहले 16 लाइनों को छोड़, और अलग से हेडर में पढ़ सकते हैं। किसी भी तरह से, अभी भी सफाई करने के लिए काफी कुछ है।

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, 
    fileEncoding="latin1", skip=16) 
# get started with the clean-up 
x[,1] <- gsub("\u0081|`", "", x[,1]) # get rid of odd characters 
x[,-1] <- as.data.frame(lapply(x[,-1], # convert to numbers 
    function(d) type.convert(gsub(d, pattern=",", replace="")))) 
+0

धन्यवाद। [इस सवाल] से (http://stackoverflow.com/questions/11069908/r-extracting-clean-utf-8-text-from-a-web-page-scraped-with-rcurl) मैंने स्थानीय को सेट करने का प्रयास किया 'Sys.setlocale' के साथ जापानी लेकिन यह या तो काम नहीं करता है ("ओएस रिपोर्ट लोकेल को" जापानी "सेट करने का अनुरोध नहीं किया जा सकता है")। – jaredwoodard

+0

हां, read.csv ("foobar.csv", fileEncoding = "latin1") मेरे लिए काम किया। मेरे पास एक एक्सेल फ़ाइल थी और सीएसवी के रूप में सहेजी गई थी, फिर फ़ाइल में एन्कोडिंग को "लैटिन 1" में सेट करना था ताकि आरएस में सीएसवी पढ़ सके। –

7

आप सिस्टम स्थान की असंगति के कारण इस मुद्दे का सामना करना पड़ा हो सकता है इस कोड Sys.setlocale("LC_ALL", "C")

0

इस मुद्दे यहाँ के साथ Rattle का उपयोग कर उन लोगों के लिए के साथ सिस्टम स्थान की स्थापना की कोशिश है कि कैसे मैं इसे हल:

  1. पहले सुनिश्चित करें कि खड़खड़ छोड़ने की तो आर पर अपने आदेश बनाने के शीघ्र
  2. > library (rattle) (यदि ऐसा पहले नहीं किया)
  3. > crv$csv.encoding="latin1"
  4. > rattle()
  5. अब आप पर ले जाने के लिए सक्षम होना चाहिए। यानी, अपनी CSV आयात> निष्पादित> मॉडल> ​​निष्पादित आदि

वह मेरे लिए काम किया, उम्मीद है कि एक थके हुए यात्री

-1

मैं वैज्ञानिक लेख के साथ एक समान समस्या थी और यहाँ एक अच्छा समाधान पाया मदद करता है : http://tm.r-forge.r-project.org/faq.html

कोड की निम्न पंक्ति का उपयोग करके:

tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte"))) 

आप बातचीत हेक्स कोड में multibyte तारों टी। मुझे उम्मीद है कि यह मदद करता है।

0

यदि फ़ाइल आप आर में आयात करने की कोशिश कर रहे हैं जो मूल रूप से एक्सेल फ़ाइल थी। सुनिश्चित करें कि आप मूल फ़ाइल खोलें और एक सीएसवी के रूप में सहेजें और आर

5

में आयात करते समय मेरे लिए यह त्रुटि तय की गई है कि टिडवर्क्स ब्रह्मांड से पाठक पैकेज मदद कर सकता है।

आप local() समारोह और उसके एन्कोडिंग तर्क का उपयोग करके read_csv() समारोह के स्थानीय तर्क के माध्यम से एन्कोडिंग सेट कर सकते हैं:

read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv", 
     skip = 14, 
     local = locale(encoding = "latin1")) 
0

मैं एक ही त्रुटि थी और कोई लाभ नहीं हुआ सब से ऊपर की कोशिश की। जब मैं आर 3.4.0 से 3.4.3

संबंधित मुद्दे