2012-03-29 17 views
54

मुझे csv फ़ाइलों का एक गुच्छा मिला है जो मैं आर में पढ़ रहा हूं और .rdata प्रारूप में पैकेज/डेटा फ़ोल्डर में शामिल हूं। दुर्भाग्य से डेटा में गैर-ASCII वर्ण चेक विफल हो जाते हैं। tools पैकेज में गैर-ASCII वर्णों (showNonASCII और showNonASCIIfile) की जांच करने के लिए दो कार्य हैं, लेकिन मुझे उन्हें हटाने/साफ़ करने के लिए कोई पता लगाने के लिए प्रतीत नहीं होता है।डेटा फ़ाइलों से गैर-ASCII वर्णों को हटा रहा है

इससे पहले कि मैं अन्य यूनिक्स उपकरण का पता लगा सकूं, आर में यह सब करना बहुत अच्छा होगा, इसलिए मैं कच्चे डेटा से अंतिम उत्पाद तक एक पूर्ण वर्कफ़्लो बनाए रख सकता हूं। क्या गैर-ASCII वर्णों से छुटकारा पाने में मेरी सहायता के लिए कोई मौजूदा पैकेज/फ़ंक्शन हैं?

+0

नियमित अभिव्यक्तियों के साथ प्रयास करें, उदाहरण के लिए फ़ंक्शन gsub। जांचें? Regexp – aatrujillob

+0

आप जानते हैं कि 'read.csv() '' एन्कोडिंग' तर्क लेता है, ताकि आप इन्हें कम से कम आर में संभाल सकें? गैर-ASCII वर्णों में कौन सी विशिष्ट जांच विफल होती है, क्या यह आर में है (यदि इसे यहां पोस्ट करें), या बाहरी? – smci

उत्तर

63

बस , गैर- ASCII वर्ण को दूर आप इस्तेमाल कर सकते हैं करने के लिए आधार आर के iconv(), sub = "" की स्थापना। कुछ इस तरह काम करना चाहिए:

x <- c("Ekstr\xf8m", "J\xf6reskog", "bi\xdfchen Z\xfcrcher") # e.g. from ?iconv 
Encoding(x) <- "latin1" # (just to make sure) 
x 
# [1] "Ekstrøm"   "Jöreskog"  "bißchen Zürcher" 

iconv(x, "latin1", "ASCII", sub="") 
# [1] "Ekstrm"  "Jreskog"  "bichen Zrcher" 

करने के लिए गैर- ASCII वर्ण का पता लगाने, या अगर कोई बिल्कुल आपकी फ़ाइलों में किसी भी थे खोजने के लिए, आप की संभावना के निम्न उपाय अनुकूलन कर सकते हैं:

## Do *any* lines contain non-ASCII characters? 
any(grepl("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII"))) 
[1] TRUE 

## Find which lines (e.g. read in by readLines()) contain non-ASCII characters 
grep("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII")) 
[1] 1 2 3 
58

इन दिनों, स्ट्रिंग पैकेज का उपयोग करने के लिए थोड़ा बेहतर तरीका है जो सामान्य यूनिकोड रूपांतरण के लिए एक फ़ंक्शन प्रदान करता है। यह आपको यथासंभव मूल पाठ को संरक्षित करने की अनुमति देता है:

x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher") 
x 
#> [1] "Ekstrøm"   "Jöreskog"  "bißchen Zürcher" 

stringi::stri_trans_general(x, "latin-ascii") 
#> [1] "Ekstrom"   "Joreskog"   "bisschen Zurcher" 
+0

कोई विचार मैं इसे स्ट्रिंग के साथ कैसे काम कर सकता हूं - 'iconv (" क्लिनिक। डेर यूनिव। Zu K_ln (एए \ u0090R) "," लैटिन 1 "," ASCII ", उप =" ") => [1] "क्लिनिक। डेर यूनिव। ज़ू के_एलएन (एएआर)" ' लेकिन ' स्ट्रिंग :: stri_trans_general ("क्लिनिक। डेर यूनिव। Zu K_ln (एए \ u0090R)", "लैटिन-एसीआईआई") => [1] " क्लिनिक। डेर यूनिव। ज़ू के_एलएन (एए \ u00 9 0 आर) "' – xbsd

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