2014-11-26 9 views
5

में अल्पविराम को डॉट परिवर्तित अगर मैं एक डेटा फ्रेम है:सांख्यिक

a b 
2.4 4.6 
3.6 66.7 
5.8 44.6 

दोनों ए और बी सांख्यिक हैं।

मैं कन्वर्ट करना चाहता हूं "।"

df$a <- as.numeric(gsub(".", ",", df$a)) 

लेकिन साथ करने के लिए "," मैं हमेशा

Warning message:NAs introduced by coercion 

हो और सभी मूल्यों एनए करने के लिए परिवर्तित कर रहे हैं। क्यूं कर?

+0

क्या आपका मतलब है कि आप अभी भी संख्यात्मक मान चाहते हैं, लेकिन आप '' 'होना चाहते हैं,'? –

+0

बिल्कुल। क्या यह संभव है? –

+0

फिनिश (फिनलैंड)। और दशमलव विभाजक अल्पविराम है। –

उत्तर

14

आपका प्रारंभिक विचार लगभग सही था, केवल नियमित अभिव्यक्ति गलत थी, क्योंकि . किसी भी प्रतीक से मेल खाता है। आप और की तरह (यह एक चरित्र वेक्टर के लिए सांख्यिक वेक्टर परिवर्तित कर देंगे) कुछ

df$a <- gsub("\\.", ",", df$a) 

इसके अलावा, आप, आर मुद्रण से उत्पादन को बदल सकते हैं की साजिश रचने as.character समारोह की कार्रवाई की जरूरत है। आप के साथ अपनी डिफ़ॉल्ट से इसे बदल:

options(OutDec= ",")

और एक और विकल्प format समारोह का उपयोग कर रहा है।

format(df, decimal.mark=",") 

मुझे लगता है कि आप, कैसे संख्या (उत्पादन) मुद्रित कर रहे हैं के बारे में परवाह है क्योंकि आंतरिक रूप से सांख्यिक एक डबल परिशुद्धता चल बिन्दु संख्या (अद्यतन धन्यवाद @digemall द्वारा टिप्पणी करने के लिए) के रूप में संग्रहीत किया जाता है। जब तक कि read.table जैसे कुछ फ़ंक्शन के लिए यह विशेष रूप से निर्दिष्ट किया गया है कि दशमलव विभाजक , है, अन्यथा ऐसा करना संभव नहीं है, क्योंकि डिफ़ॉल्ट रूप से , फ़ंक्शन तर्कों को अलग करने के लिए उपयोग किया जाता है।

और NA ठीक उसी कारण से शुरू किया गया है (गलत रेगेक्स से अलग)।

df$a <- as.numeric(gsub("\\.", ",", df$a)) 

डिफ़ॉल्ट पार्सर तक पता नहीं है कि , एक दशमलव विभाजक के रूप में इस्तेमाल किया जाता है।

+1

लगता है कि 'विकल्प' भाग निश्चित रूप से ओपी की ज़रूरत है। –

+0

यह परिवर्तित करता है "।" सेवा मेरे ","। अच्छा! बात यह है कि मैं वास्तव में जो हासिल करने की कोशिश कर रहा हूं वह है भौगोलिक निर्देशांक की एक बड़ी फाइल निर्यात करना। कार्यक्रम जो निर्देशांक को संभालता है उन्हें पहचान नहीं है अगर वे चरित्र प्रारूप में हैं। मैं बाद में जांच करूंगा कि कार्यक्रम इस समाधान को स्वीकार करता है या नहीं। –

+0

यदि आप 'write.csv' जैसे कुछ के साथ डेटा निर्यात कर रहे हैं तो आपको इसे अतिरिक्त * dec * पैरामीटर के साथ उपयोग करना होगा:' write.csv (डेटा, फ़ाइल = फ़ाइल, dec = ",") ' –

2

आप केवल मुद्रण के लिए अल्पविराम के चाहते हैं, आप प्रारूप का उपयोग कर सकते हैं:

data <- data.frame(a=rnorm(5), b=rnorm(5)) 
format(data, decimal.mark=",") 
       a   b 
1 1,058878354 0,1812629 
2 1,026163906 -0,6666500 
3 1,538423889 -1,4206752 
4 -0,561585916 -0,4729558 
5 -0,004685406 1,0744514 

हालांकि यह केवल वे कैसे दिखते बदल जाएगा। आपको अभी भी असाइनमेंट में डॉट्स का उपयोग करना होगा।

+1

यदि आप इस तरह दिखने के लिए आउटपुट को स्थायी रूप से सेट करना चाहते हैं, [इस उत्तर को देखें] (http://stackoverflow.com/questions/16384836/how-to-set-as-decimal-separator-with-r-rstudio)। आप 'विकल्प (आउटडेक =", ") 'का उपयोग कर सकते हैं। – nograpes

+0

लेकिन यह उन संख्यात्मक से चरित्र को बदलता है, है ना? मुझे मूल्यों को संख्यात्मक होने की आवश्यकता होगी और "," –

+1

यहां यह बात है: कंप्यूटर स्टोर आपको लगता है कि तुलना में बहुत अलग तरीकों से संख्याएं करता है। इसके साथ आप बदल सकते हैं कि आर आपको संख्याओं को कैसे प्रस्तुत करता है। वे संख्यात्मक होंगे, लेकिन स्क्रीन पर मुद्रित होने पर उनके पास एक बिंदु के बजाय उस अल्पविराम होगा। इनपुट के लिए मुझे संदेह है कि आप डॉट को अल्पविराम में नहीं बदल सकते हैं। इस सी (1,2,3,4) 'पर विचार करें। अब दुभाषिया कैसे पता चलेगा कि यह 1 2 3 और 4 या 1.2 और 3.4 है? –

1

क्या आप ओएसएक्स या विंडोज़ पर हैं या ...?

प्रतिनिधित्व बदलने के लिए आपको LC_NUMERIC पैरामीटर को देखने के लिए चाहते हैं, हालांकि आर प्रलेखन चेतावनी दी है कि इस बदलते आर संचालित करने के लिए अजीब कारण हो सकता है (, दशमलव के रूप में उपयोग करने के लिए मुश्किल है जब यह भी सूचियां निर्धारित करने के लिए किया जाता है ...)

> Sys.getlocale("LC_NUMERIC") 
[1] "C" 
> a=c(1.01,2.01) 
> a 
[1] 1.01 2.01 
> Sys.setlocale("LC_NUMERIC", "de_DE") # this is OSX syntax 
> a 
[1] 1,01 2,01 

बस इसके साथ रहने के लिए सुरक्षित रहें!

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