2014-07-14 17 views
5

this question जवाब देने के लिए प्रयास करते समय, मैं मैं क्या बराबर संचालन होने की उम्मीद में mutate और transform के बीच एक अंतर का सामना करना पड़ा।dplyr के बीच अंतर: पिन और pmax का उपयोग करते समय mutate और परिवर्तन?

# data 
x <- data.frame(a=c(rep(0,10),rep(1,10),3),b=c(1:10,0,11:19,0)) 

#transform 
transform(x,a=pmin(a,b), b=pmax(a,b)) 
    a b 
1 0 1 
2 0 2 
3 0 3 
4 0 4 
5 0 5 
6 0 6 
7 0 7 
8 0 8 
9 0 9 
10 0 10 
11 0 1 
12 1 11 
13 1 12 
14 1 13 
15 1 14 
16 1 15 
17 1 16 
18 1 17 
19 1 18 
20 1 19 
21 0 3 

#mutate 
libarary(dplyr) 
x %>% mutate(a=pmin(a,b), b=pmax(a,b)) 
    a b 
1 0 1 
2 0 2 
3 0 3 
4 0 4 
5 0 5 
6 0 6 
7 0 7 
8 0 8 
9 0 9 
10 0 10 
11 0 0 
12 1 11 
13 1 12 
14 1 13 
15 1 14 
16 1 15 
17 1 16 
18 1 17 
19 1 18 
20 1 19 
21 0 0 

नोट 11 लाइनों और 21 में मतभेद मुझे लगता है कि mutate डेटा परिवर्तनशील है के रूप में यह हो जाता है और इसलिए, pmax मूल डेटा नहीं दिखाई दे रहा है। क्या ये सही है? क्या यह एक बग है, या डिजाइन द्वारा?

+0

आप सही हैं, और यह डिज़ाइन द्वारा है (अभिलेखागार में कुछ चर्चा है, मैं कहां भूल जाता हूं)। – baptiste

+0

@baptiste धन्यवाद, मुझे लगता है कि मैं समझता हूं कि क्यों: कंप्यूटेड वैरिएबल को उसी कमांड में इस्तेमाल करने की अनुमति देने के लिए, इसलिए मूल को स्पष्ट रूप से संदर्भित करने की आवश्यकता है। – James

उत्तर

3

ऐसा प्रतीत होता है मेरे शक सही हैं, और यह गणना की चर का उपयोग तुरंत बाद अनुमति देने के लिए, उदाहरण के लिए डिजाइन कर रहा है कि:

data.frame(a=1:4,b=5:8) %>% mutate(sum=a+b, letter=letters[sum]) 
    a b sum letter 
1 1 5 6  f 
2 2 6 8  h 
3 3 7 10  j 
4 4 8 12  l 

आदेश transform एक से अपेक्षित व्यवहार को दोहराने के लिए में की जरूरत है बस संदर्भित करने के लिए वेरिएबल सीधे:

x %>% mutate(a=pmin(x$a,x$b), b=pmax(x$a,x$b)) 
    a b 
1 0 1 
2 0 2 
3 0 3 
4 0 4 
5 0 5 
6 0 6 
7 0 7 
8 0 8 
9 0 9 
10 0 10 
11 0 1 
12 1 11 
13 1 12 
14 1 13 
15 1 14 
16 1 15 
17 1 16 
18 1 17 
19 1 18 
20 1 19 
21 0 3 
+2

नहीं स्पष्ट रूप से pmin' और 'pmax' के बारे में', लेकिन आप [dplyr शब्दचित्र] में इस व्यवहार (http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html) के बारे में पढ़ सकते हैं: ' dplyr :: mutate() '' plyr :: mutate() 'और इसी तरह 'बेस :: ट्रांसफॉर्म()' के समान काम करता है। 'उत्परिवर्तित()' और 'बदलने()' के बीच मुख्य अंतर यह है कि उत्परिवर्तन आप स्तंभों है कि आप बस [अपने उदाहरण में 'एक' स्तंभ] बनाया का उल्लेख करने की अनुमति देता है " – Henrik

+0

आप कृपया%>% के उपयोग समझा सकते है ? – Anusha

+0

उसमें कोई लेखन त्रुटि है:।?। सही आप उत्परिवर्तित की बात कर रहे "आदेश को बदलने से एक की जरूरत के लिए अपेक्षित व्यवहार को दोहराने के लिए में", इस अंतर को चेतावनी के लिए धन्यवाद – Anusha

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