2011-06-13 20 views
17

में कनवर्ट करते समय मान बदलना मेरे पास ऊपर से प्रारूप के साथ एक डेटा फ़ाइल है।
मैंने इसे आर में लोड किया, और डिस्ट कॉलम से मूल्यों के साथ हिस्टोग्राम प्लॉट करने की कोशिश की और मुझे त्रुटि मिली "एक्स संख्यात्मक होना चाहिए"। इसलिए मैंने प्रारूप को बदलने की कोशिश की।कॉलम प्रकार को संख्यात्मक

> head(data) 

    V1  V2 
1 type gene_dist 
2 A  64667 
3 A  76486 
4 A  97416 
5 A  30876 
6 A  88018 

> summary(data) 
    V1   V2  
A : 67 100 : 1 
B :122 100906 : 1 
type: 1 102349 : 1 
      1033 : 1 
      10544 : 1 
      10745 : 1 
      (Other):184 

मैं स्तंभ sapply प्रयोग करने के लिए प्रारूप लेकिन मान बदल रहे हैं स्थापित करने के लिए करने की कोशिश की:

> data[,2]<-sapply(data[,2],as.numeric) 

> head(data) 
    V1 V2 
1 type 190 
2 A 146 
3 A 166 
4 A 189 

summary(data) 
    V1   V2   
A : 67 Min. : 1.00 
B :122 1st Qu.: 48.25 
type: 1 Median : 95.50 
      Mean : 95.50 
      3rd Qu.:142.75 
      Max. :190.00 

क्या किसी को पता है कि क्यों हो रहा है?

+0

क्या आप 'dput (डेटा) 'के आउटपुट पेस्ट कर सकते हैं ताकि हम आपके परिणामों को पुन: उत्पन्न कर सकें। मेरा संदेह यह है कि आप सीधे 'कारक' को 'संख्यात्मक' में परिवर्तित कर रहे हैं, जो समस्या पैदा कर रहा है। इसे 'फ़ंक्शन (x) as.character (as।संख्यात्मक (एक्स)) 'और देखें कि क्या यह – Ramnath

+0

@ रामनाथ - समस्या के साथ हल किया गया है। न्यूमेरिक (as.character (x)) – agatha

+0

ऐसा लगता है कि आर आपके कॉलम को कारकों के रूप में वर्गीकृत कर रहा है क्योंकि आप एक पंक्ति के रूप में हेडर पढ़ रहे हैं प्रवेश। अपने 'read.table() 'कॉल में' हेडर = टी' सेट करना इसे ठीक करना चाहिए। –

उत्तर

32

ऐसा लगता है कि आपका दूसरा कॉलम एक कारक है। as.numeric से पहले आपको as.character का उपयोग करने की आवश्यकता है। ऐसा इसलिए होता है क्योंकि कारकों को लेजर स्तर लेबल देने के लिए आंतरिक रूप से तालिका के साथ पूर्णांक के रूप में संग्रहीत किया जाता है। बस as.numeric का उपयोग केवल आंतरिक पूर्णांक कोड देगा। sapply का उपयोग करने की कोई आवश्यकता नहीं है क्योंकि इन कार्यों को वेक्टरकृत किया गया है।

data[,2] <- as.numeric(as.character(data[,2])) 

यह संभावना है कि कॉलम एक कारक है क्योंकि कुछ प्रविष्टियों में कुछ गैर-संख्यात्मक वर्ण हैं। ऐसी कोई प्रविष्टियां उचित चेतावनी के साथ NA में परिवर्तित हो जाएंगी, लेकिन आप अपने कच्चे डेटा में इसकी जांच कर सकते हैं।

एक साइड नोट के रूप में, data एक परिवर्तनीय नाम के लिए एक गरीब (हालांकि अमान्य नहीं) विकल्प है क्योंकि एक ही नाम का मूल कार्य है।

+0

@ जेम्स: यह काम करता है। धन्यवाद और मैं आपके अवलोकन पर विचार करूंगा। – agatha

+0

@Andra मैं अब देख सकता हूं कि आपका प्रश्न थोड़ा बेहतर स्वरूपित किया गया है कि एक कारण यह है कि यह एक कारक है कि कॉलम नाम डेटा में शामिल हैं। आप उस डेटा को 'हेडर = TRUE' तर्क जोड़ना चाहेंगे जिसमें आप डेटा को पढ़ते हैं। – James

+0

@ जेम्स- मुझे याद होगा। - मैंने टेक्स्ट फ़ाइल से कॉलम हटा दिए और उन्हें मैन्युअल रूप से जोड़ा, शायद सबसे शानदार तरीका नहीं ... लेकिन यह काम करता है। उपनाम (chip_data) <- c ("टाइप", "gene_dist") – agatha

0

मेरे पास 'सूची' मान वाले मैट्रिक्स के लिए यह वही समस्या थी, जब कोई ऑब्जेक्ट data read.csv से पढ़ा गया था। as.character() यहां काम नहीं करता है, और as.numeric() और data.matrix() मैट्रिक्स में मानों को बदल दिया है। इसके बजाय आप निम्नलिखित का उपयोग करने की आवश्यकता है:

matrix_numeric[1:m,1:n] <- as.numeric(as.matrix(data[1:m,1:n]))

पहले एक डबल करने के लिए एक चरित्र को बदलने तो। मैट्रिक्स आयाम डेटा के लिए [एम, एन]।

out1 <- as.numeric(unlist(vec1));

0

यह शायद ज्यादा बेहतर इसे ठीक करने के लिए:

(आप बताए मूल्यों से पहले पहली वस्तु matrix_numeric बनाने की जरूरत ... matrix_numeric <- matrix(0,m,n)) सूची प्रारूप में एक वेक्टर vec1 के लिए, मैं निम्नलिखित का उपयोग as.numeric() या as.character() का उपयोग करके फ़ाइल को पढ़ने के दौरान। जब आपकी फ़ाइल पढ़ने, अगर पहली पंक्ति हेडर

  • NA और नहीं Na या NaN है

    • header=TRUE है सुनिश्चित करें (Ctrl + H और अपने datafile में एनए द्वारा की जगह) में
    • कोई अन्य चरित्र तार आपके न्यूमेरिक कॉलम

    फिर आर स्वचालित रूप से उन्हें संख्यात्मक मानते हैं।

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