2012-11-26 20 views
13

द्वारा परिभाषित असतत श्रेणियों को निरंतर संख्यात्मक मानों में कनवर्ट करें मेरे पास निरंतर संख्यात्मक चर, महीनों में आयु (आयु_एमएनएच) के साथ एक डेटा फ्रेम है। मैं उम्र अंतराल के आधार पर आयु श्रेणियों के साथ एक नया असतत चर बनाना चाहता हूं।अंतराल

# Some example data 
rota2 <- data.frame(age_mnth = 1:170) 

मैं ifelse आधारित प्रक्रिया (नीचे) बनाए हैं, लेकिन मेरा मानना ​​है कि वहाँ और अधिक सुरुचिपूर्ण समाधान के लिए एक संभावना है।

rota2$age_gr<-ifelse(rota2$age_mnth < 6, rr2 <- "0-5 mnths", 

    ifelse(rota2$age_mnth > 5 & rota2$age_mnth < 12, rr2 <- "6-11 mnths", 

      ifelse(rota2$age_mnth > 11 & rota2$age_mnth < 24, rr2 <- "12-23 mnths", 

       ifelse(rota2$age_mnth > 23 & rota2$age_mnth < 60, rr2 <- "24-59 mnths", 

         ifelse(rota2$age_mnth > 59 & rota2$age_mnth < 167, rr2 <- "5-14 yrs", 

           rr2 <- "adult"))))) 

मुझे पता है कि cut समारोह है, लेकिन मैं/वर्गीकृत discretize करने के लिए अपने उद्देश्य के लिए इसके साथ सौदा नहीं कर सका।

+0

यहाँ एक बुनियादी त्रुटि "हाँ" और "नहीं" मानकों –

उत्तर

30

यदि कोई कारण है कि आप cut का उपयोग नहीं करना चाहते हैं तो मुझे समझ में नहीं आता क्यों। cut के लिए ठीक से काम करेंगे क्या आप

# Some example data 
rota2 <- data.frame(age_mnth = 1:170) 
# Your way of doing things to compare against 
rota2$age_gr<-ifelse(rota2$age_mnth<6,rr2<-"0-5 mnths", 
        ifelse(rota2$age_mnth>5&rota2$age_mnth<12,rr2<-"6-11 mnths", 
          ifelse(rota2$age_mnth>11&rota2$age_mnth<24,rr2<-"12-23 mnths", 
            ifelse(rota2$age_mnth>23&rota2$age_mnth<60,rr2<-"24-59 mnths", 
              ifelse(rota2$age_mnth>59&rota2$age_mnth<167,rr2<-"5-14 yrs", 
               rr2<-"adult"))))) 

# Using cut 
rota2$age_grcut <- cut(rota2$age_mnth, 
         breaks = c(-Inf, 6, 12, 24, 60, 167, Inf), 
         labels = c("0-5 mnths", "6-11 mnths", "12-23 mnths", "24-59 mnths", "5-14 yrs", "adult"), 
         right = FALSE) 
10
rota2$age_gr<-c("0-5 mnths", "6-11 mnths", "12-23 mnths", "24-59 mnths", "5-14 yrs", 
       "adult")[ 
      findInterval(rota2$age_mnth , c(-Inf, 5.5, 11.5, 23.5, 59.5, 166.5, Inf)) ] 
+1

के लिए मूल्यों में असाइनमेंट ऑपरेटर के उपयोग यह 'से थोड़ी अलग है है क्या करना चाहते हैं कटौती करें कि अंतराल बाईं ओर बंद हो जाते हैं और दाईं ओर खुलते हैं जब तक अन्यथा निर्दिष्ट नहीं किया जाता है। –

+1

लेकिन आप हमेशा खोज के अंतराल को लिख सकते हैं जो दाईं ओर बंद है और बाईं ओर खुला है - http://stackoverflow.com/questions/13482872/findinterval-with-right-closed-intervals – Dason

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