2012-09-10 8 views
9

मैं एक सदिश है कि इस तरह दिखता है:आर में, कस्टम ब्रेक के साथ, मैं निरंतर चर से बिनड फैक्टर चर कैसे बना सकता हूं?

dataset<-c(4,7,9,1,10,15,18,19,3,16,10,16,12,22,2,23,16,17) 

मैं चार डमी श्रेणियों, बनाना चाहेंगे जिसमें मैं बिन कस्टम व्यवधान द्वारा निरंतर डाटासेट। .. उदाहरण के लिए: 1: 4, 5: 9, 10:17, 18:23।

उत्पादन डमी श्रेणियों (इस मामले में 18) मूल निरंतर वेक्टर के रूप में एक ही लंबाई के लिए होता है, लेकिन अब प्रत्येक binned डमी चर बस होते हैं एक 1 या 0.

उत्तर

16

उपयोग cut:

data.frame(dataset, bin=cut(dataset, c(1,4,9,17,23), include.lowest=TRUE)) 
+1

'चर डमी (जो क्या ओ पी के लिए कहा cut') से प्राप्त करने के लिए,' कोशिश model.matrix (के लिए एक आरक्षित शब्द ~ बिन -1, डेटा = डाटासेट) ' –

7

मैं यहोशू से सहमत हूं कि cut अधिकतर लोग इस कार्य के बारे में सोचेंगे। मुझे इसके डिफ़ॉल्ट पसंद नहीं हैं, बाएं बंद अंतराल पसंद करते हैं और यह cut के साथ सही ढंग से सेट करने के लिए मामूली दर्द है (हालांकि यह किया जा सकता है। सौभाग्य से मेरे कमजोर मस्तिष्क के लिए, फ्रैंक हैरेल ने cut2 फ़ंक्शन डिज़ाइन किया है उसका एचएमआईसी पैकेज जिसका डिफ़ॉल्ट मैं पसंद करता हूं। तीसरा विकल्प findInterval का उपयोग करना है जो विशेष रूप से उन समस्याओं के लिए उपयुक्त है जहां आप किसी अन्य निष्कर्ष या चयन प्रक्रिया के लिए इंडेक्स के रूप में परिणाम का उपयोग करना चाहते हैं। इसके परिणाम लगभग as.numeric लागू होते हैं cut के परिणामों के लिए:

require(Hmisc) 
cut2(dataset, c(1,4,9,17,23)) 
[1] [ 4, 9) [ 4, 9) [ 9,17) [ 1, 4) [ 9,17) [ 9,17) [17,23] [17,23] [ 1, 4) [ 9,17) 
[11] [ 9,17) [ 9,17) [ 9,17) [17,23] [ 1, 4) [17,23] [ 9,17) [17,23] 

(ध्यान दें कि findInterval बंद अंत के रूप में ऊपरी सीमा का उपयोग करेगा एक अतिरिक्त अंतराल के रूप में जब तक आप अधिकतम डब्ल्यू की जगह ith Inf, आर में अनंत)

findInterval(dataset, c(c(1,4,9,17,23))) 
[1] 2 2 3 1 3 3 4 4 1 3 3 3 3 4 1 5 3 4 
as.numeric(cut(dataset, c(1,4,9,17,Inf), include.lowest=TRUE)) 
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3 
as.numeric(cut(dataset, c(1,4,9,17,23), include.lowest=TRUE)) 
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3 
संबंधित मुद्दे

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