2011-04-19 15 views
11

मान लें कि हम एक dataframeकिसी शर्त पर आधारित डेटा.फ्रेम में नया चर कैसे बनाएं?

x y 
1 1 
2 4 
4 5 

कैसे आप dataframe के लिए एक नया चर जोड़ सकते हैं ऐसी है कि यदि एक्स 1 से कम या उसके बराबर है यह रिटर्न "अच्छा" अगर एक्स है 3 और 5 के बीच यह रिटर्न है " बुरा "अन्य रिटर्न" मेला "

x y w 
1 1 "good" 
2 2 "fair" 
5 5 "bad" 

ओक्रम द्वारा दिखाए गए तरीके को लागू किया गया, हालांकि यह यहां काम नहीं करता है।

d1 <- c("e", "c", "a") 
d2 <- c("e", "a", "b") 

w <- ifelse(d1 == "e" & (d2=="e"), 1, ifelse((d1 == "a") & (d2 =="b"), 2, ifelse(d1 == "e"),3,99)) 

कोई विचार? धन्यवाद

+1

'कट' फ़ंक्शन – hadley

+0

पर देखें आपका अंतिम कोड काम नहीं कर रहा है क्योंकि आपने ब्रांड्स को गड़बड़ कर दिया है; यह हमेशा 'ifelse (cond, ifTrue, ifFalse) होना चाहिए,' कभी नहीं if ifsese (cond) ifTrue, ifFalse'। – mbq

+0

धन्यवाद! नोट किया गया .. :) – eastafri

उत्तर

17

"अगर और अन्य स्थितियों" का उपयोग करने के लिए एक स्पष्ट और सीधी संभावना है। कि उदाहरण

x <- c(1, 2, 4) 
y <- c(1, 4, 5) 
w <- ifelse(x <= 1, "good", ifelse((x >= 3) & (x <= 5), "bad", "fair")) 
data.frame(x, y, w) 

** संपादन में अतिरिक्त प्रश्न ** के लिए में है कि आप क्या उम्मीद करते हैं?

> d1 <- c("e", "c", "a") 
> d2 <- c("e", "a", "b") 
> 
> w <- ifelse((d1 == "e") & (d2 == "e"), 1, 
+ ifelse((d1=="a") & (d2 == "b"), 2, 
+ ifelse((d1 == "e"), 3, 99))) 
>  
> data.frame(d1, d2, w) 
    d1 d2 w 
1 e e 1 
2 c a 99 
3 a b 2 

आप ifelse समारोह के साथ सहज महसूस नहीं करते हैं, तो आप भी इस तरह के अनुप्रयोगों के लिए if और else बयान के साथ काम कर सकते हैं।

+0

धन्यवाद एक टन, हालांकि दृष्टिकोण केवल 2 स्थितियों तक ही सीमित है? – eastafri

+1

से ऊपर संपादित प्रश्न देखें मैंने अपना जवाब संपादित किया है – Marco

3

यदि आपके पास बहुत सीमित स्तर हैं, तो आप y को कारक में परिवर्तित करने और इसके स्तर को बदलने का प्रयास कर सकते हैं।

> xy <- data.frame(x = c(1, 2, 4), y = c(1, 4, 5)) 
> xy$w <- as.factor(xy$y) 
> levels(xy$w) <- c("good", "fair", "bad") 
> xy 
    x y w 
1 1 1 good 
2 2 4 fair 
3 4 5 bad 
संबंधित मुद्दे