2014-12-17 7 views
15

से डेटा.फ्रेम कॉलम को कैसे परिवर्तित करें मेरे पास data.frame है जिसका वर्ग कॉलम Factor है। मैं इसे संख्यात्मक रूप में परिवर्तित करना चाहता हूं ताकि मैं सहसंबंध मैट्रिक्स का उपयोग कर सकूं।फैक्टर से numeric

> str(breast) 
'data.frame': 699 obs. of 10 variables: 
.... 
$ class     : Factor w/ 2 levels "2","4": 1 1 1 1 1 2 1 1 1 1 ... 
> table(breast$class) 
    2 4 
458 241 
> cor(breast) 
Error in cor(breast) : 'x' must be numeric 

मैं एक फैक्टर कॉलम को एक संख्यात्मक कॉलम में कैसे परिवर्तित कर सकता हूं?

+4

यह समस्या SO –

+2

पर डुप्लिकेट होने के लिए बहुत बार होती है और सबसे अच्छा जवाब हमेशा समान होता है, "पढ़ें"? कारक' " –

उत्तर

56
breast$class <- as.numeric(as.character(breast$class)) 

आप numeric

indx <- sapply(breast, is.factor) 
breast[indx] <- lapply(breast[indx], function(x) as.numeric(as.character(x))) 

एक अन्य विकल्प का उपयोग कर read.table या read.csv

शायद ज़रुरत पड़े, अन्य विकल्प बनाने के लिए फ़ाइल पढ़ते समय stringsAsFactors=FALSE उपयोग करने के लिए है कन्वर्ट करने के लिए कई कॉलम हैं, तो/कॉलम बदलें

breast[,'class'] <- as.numeric(as.character(breast[,'class'])) 

या

breast <- transform(breast, class=as.numeric(as.character(breast))) 
9

?factor से:

लगभग अपने मूल संख्यात्मक मान के लिए च एक पहलू को बदलने के लिए, as.numeric(levels(f))[f] की सिफारिश की और as.numeric(as.character(f)) की तुलना में थोड़ा और अधिक कुशल है।

breast <- within(breast, { 
    class <- as.numeric(as.character(class)) 
}) 

नोट है कि आप इसे एक अंकीय को परिवर्तित करने से पहले एक चरित्र पर अपना सदिश परिवर्तित करना चाहते हैं:

0

$dollarsign अंकन के लिए एक विकल्प के रूप में, एक within ब्लॉक का उपयोग करें। बस as.numeric(class) पर कॉल करने से स्तरों की बजाय प्रत्येक कारक स्तर (1, 2) के अनुरूप आईडी नहीं होगी।

4

यह FAQ 7.10 है। अन्य ने दिखाया है कि डेटा फ्रेम में एक कॉलम पर या डेटा फ्रेम में एकाधिक कॉलम पर इसे कैसे लागू किया जाए। लेकिन यह वास्तव में लक्षण का इलाज नहीं कर रहा है, कारण का इलाज नहीं कर रहा है।

colClassesread.table पर तर्क और संबंधित कार्यों को आर को बताने के लिए एक बेहतर तरीका है कि कॉलम संख्यात्मक होना चाहिए ताकि यह कभी कारक नहीं बनता और संख्यात्मक बनाता है। यह NA में किसी भी मान के लिए डालेगा जो संख्यात्मक रूप से परिवर्तित नहीं होता है।

एक और बेहतर विकल्प यह पता लगाने के लिए है कि क्यों आर कॉलम को संख्यात्मक (आमतौर पर उस कॉलम में कहीं भी एक गैर-संख्यात्मक चरित्र) के रूप में नहीं पहचानता है और मूल डेटा को ठीक करता है ताकि इसे NA एस बनाने के बिना ठीक से पढ़ा जा सके।

सर्वश्रेष्ठ अंतिम 2 का संयोजन है, सुनिश्चित करें कि डेटा इसे पढ़ने से पहले सही है और colClasses निर्दिष्ट करें, इसलिए आर को अनुमान लगाने की आवश्यकता नहीं है (यह भी पढ़ने में तेज़ हो सकता है)।

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