आर

2010-03-24 13 views
10

में एक संख्यात्मक चर को बिन करना मेरे पास एक वेक्टर एक्स है जिसमें सकारात्मक संख्याएं हैं जिन्हें मैं बिन/डिस्क्रिटिज़ करना चाहता हूं। इस वेक्टर के लिए, मैं संख्याओं [0, 10) को वेक्टर में मौजूद होने के समान दिखाना चाहता हूं, लेकिन 10+ होने के लिए संख्या [10, ∞)।आर

मैं उपयोग कर रहा हूँ:

x <- c(0,1,3,4,2,4,2,5,43,432,34,2,34,2,342,3,4,2) 
binned.x <- as.factor(ifelse(x > 10,"10+",x)) 

लेकिन यह मेरे लिए klugey महसूस करता है। क्या कोई बेहतर समाधान या एक अलग दृष्टिकोण जानता है?

+1

इसके बारे में क्या है? यह मेरे लिए बहुत साफ दिखता है। –

+2

@Rob: इस दृष्टिकोण का मुख्य दोष यह है कि आपको उन मानों के लिए बनाए गए कारक स्तर नहीं मिलते हैं जो कि नहीं हैं (उदाहरण के लिए, इस डेटा के लिए कोई स्तर नहीं है "6")। इसे 'कारक' पर कॉल में स्पष्ट स्तर के साथ तय किया जा सकता है। –

उत्तर

17

कैसे cut के बारे में:

binned.x=cut(x, breaks=c(-1:9,Inf), labels=c(as.character(0:9),'10+')) 

कौन सा पैदावार:

[1] 0 1 3 4 2 4 2 5 10+ 10+ 10+ 2 10+ 2 10+ 3 4 2 
Levels: 0 1 2 3 4 5 6 7 8 9 10+ 
+1

यह प्रश्न में समाधान से अधिक जटिल लगता है। –

+1

मामूली सुधार: 'Inf' के साथ' 1e6' स्वैप करें। आपको 'include.lowest = TRUE' की आवश्यकता नहीं है। ('टेबल (binned.x) को कॉल करके उत्तरों की तुलना करें। –

+0

@Rob: हाँ, मैं नहीं कह सकता कि मैं असहमत हूं :) @Richie: धन्यवाद! मैं अभी भी भाषा सीख रहा हूं, इसलिए आपके "मामूली सुधार" मेरे लिए एक बड़ी मदद हैं। – unutbu

7

आप प्रश्न असंगत है।
विवरण में 10 "10+" समूह से संबंधित है, लेकिन कोड 10 से अलग स्तर है।

pmin(x, 10) 
# [1] 0 1 3 4 2 4 2 5 10 10 10 2 10 2 10 3 4 2 10 
: तो 10 में होना चाहिए "10+" समूह तो आप कोड

as.factor(ifelse(x >= 10,"10+",x)) 

इस मामले आप 10 के लिए डेटा काट-छांट कर सकता है (यदि आप एक कारक नहीं करना चाहती) में होना चाहिए

2
x[x>=10]<-"10+" 

यह आपको स्ट्रिंग का वेक्टर देगा। आप अपने परिणाम प्राप्त करने के लिए संख्याओं को वापस करने के लिए as.numeric(x) का उपयोग कर सकते हैं ("10+" NA बनें), या as.factor(x)

ध्यान दें कि यह मूल वेक्टर को स्वयं संशोधित करेगा, ताकि आप किसी अन्य वेक्टर में प्रतिलिपि बनाना चाहें और उस पर काम कर सकें।