2014-09-29 9 views
13

नोट: इस प्रश्न का शीर्षक इसे plyr कार्यों को उनके dplyr समकक्षों को मुखौटा करते समय मुद्दों के लिए कैननिकल प्रश्न बनाने के लिए संपादित किया गया है। शेष प्रश्न अपरिवर्तित बनी हुई है।जब मैं `dplyr` के बाद 'plyr` लोड करता हूं तो सारांश को सारांशित या उत्परिवर्तित क्यों करता है?


मान लीजिए मैं निम्नलिखित डेटा है:

dfx <- data.frame(
    group = c(rep('A', 8), rep('B', 15), rep('C', 6)), 
    sex = sample(c("M", "F"), size = 29, replace = TRUE), 
    age = runif(n = 29, min = 18, max = 54) 
) 

अच्छे पुराने plyr मैं एक छोटे से टेबल निम्न कोड के साथ अपने डेटा का सारांश बना सकते हैं के साथ:

require(plyr) 
ddply(dfx, .(group, sex), summarize, 
     mean = round(mean(age), 2), 
     sd = round(sd(age), 2)) 

उत्पादन नज़र इस तरह:

group sex mean sd 
1  A F 49.68 5.68 
2  A M 32.21 6.27 
3  B F 31.87 9.80 
4  B M 37.54 9.73 
5  C F 40.61 15.21 
6  C M 36.33 11.33 

मैं अपना कोड dplyr और %>% ऑपरेटर पर ले जाने की कोशिश कर रहा हूं। मेरा कोड डीएफ लेता है और फिर इसे समूह और लिंग द्वारा समूहित करता है और फिर इसे सारांशित करता है। यही कारण है:

dfx %>% group_by(group, sex) %>% 
    summarise(mean = round(mean(age), 2), sd = round(sd(age), 2)) 

लेकिन मेरी उत्पादन होता है:

mean sd 
1 35.56 9.92 

क्या मैं गलत कर रहा हूँ?

धन्यवाद!

उत्तर

19

समस्या यह है कि आप पहले dplyr लोड कर रहे हैं और फिर plyr, इसलिए plyr का फ़ंक्शन summarise मास्किंग dplyr का फ़ंक्शन summarise है।

require(plyr) 
    Loading required package: plyr 
------------------------------------------------------------------------------------------ 
You have loaded plyr after dplyr - this is likely to cause problems. 
If you need functions from both plyr and dplyr, please load plyr first, then dplyr: 
library(plyr); library(dplyr) 
------------------------------------------------------------------------------------------ 

Attaching package: ‘plyr’ 

The following objects are masked from ‘package:dplyr’: 

    arrange, desc, failwith, id, mutate, summarise, summarize 
क्रम में

तो अपने कोड काम करने के लिए, या तो plyr detach(package:plyr) अलग या आर और लोड plyr को पुनः आरंभ और फिर dplyr (या लोड केवल dplyr) के लिए:

library(dplyr) 
dfx %>% group_by(group, sex) %>% 
    summarise(mean = round(mean(age), 2), sd = round(sd(age), 2)) 
Source: local data frame [6 x 4] 
Groups: group 

    group sex mean sd 
1  A F 41.51 8.24 
2  A M 32.23 11.85 
3  B F 38.79 11.93 
4  B M 31.00 7.92 
5  C F 24.97 7.46 
6  C M 36.17 9.11 
जब ऐसा होता है तो आप इस चेतावनी मिलती है

या आप स्पष्ट रूप से dplyr कॉल कर सकते हैं के अपने कोड में संक्षेप में प्रस्तुत है, तो सही समारोह कोई फर्क नहीं पड़ता कि कैसे आप संकुल लोड बुलाया जाएगा:

dfx %>% group_by(group, sex) %>% 
    dplyr::summarise(mean = round(mean(age), 2), sd = round(sd(age), 2)) 
+1

अपने कुछ सेकंड के लिए :-) – A5C1D2H2I1M1N2O1R2T1

+8

+1 मुझे समझ नहीं आता क्यों इतने कम लोग देखते हैं कि चेतावनी:/ – hadley

+1

@hadley 'किस्मत :: भाग्य (9)' – Gregor

4

आपका कोडबुला है dplyr::summarise के बजायजिस क्रम में आपने "प्लीयर" और "dplyr" लोड किया है।

डेमो:

library(dplyr) ## I'm guessing this is the order you loaded 
library(plyr) 
dfx %>% group_by(group, sex) %>% 
    summarise(mean = round(mean(age), 2), sd = round(sd(age), 2)) 
# mean sd 
# 1 36.88 9.76 
dfx %>% group_by(group, sex) %>% 
    dplyr::summarise(mean = round(mean(age), 2), sd = round(sd(age), 2)) 
# Source: local data frame [6 x 4] 
# Groups: group 
# 
# group sex mean sd 
# 1  A F 32.17 6.30 
# 2  A M 30.98 7.37 
# 3  B F 38.20 7.67 
# 4  B M 33.12 12.24 
# 5  C F 43.91 10.31 
# 6  C M 47.53 8.25 
संबंधित मुद्दे

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