2014-06-10 7 views
33

मैं dplyr के साथ अपने सभी plyr कॉल को प्रतिस्थापित करने का प्रयास कर रहा हूं। अभी भी कुछ स्नैग हैं और उनमें से एक group_by फ़ंक्शन के साथ है। मुझे लगता है कि यह दूसरे ddply तर्क के समान कार्य करता है और समूह सूची चर के आधार पर एक विभाजन, लागू और गठबंधन करता है। लेकिन यह मामला प्रतीत नहीं होता है। यहां एक मामूली उदाहरण है।ddply व्यवहार को दोहराने के लिए कैसे करें जो dplyr के साथ एक कस्टम फ़ंक्शन का उपयोग करता है?

के अब हम तो जैसे iris डेटासेट में प्रजातियों विभाजित है और प्रत्येक टुकड़ा करने के लिए इस समारोह लागू कर सकते हैं एक मूर्खतापूर्ण समारोह

mm <- function(x) return(x[1:5, ]) 

को परिभाषित करते हैं।

ddply(iris, .(Species), mm) 

यह इरादा के रूप में कार्य करता है। हालांकि, जब मैं dplyr के साथ ऐसा करने की कोशिश करता हूं, तो यह अपेक्षा के अनुसार काम नहीं करता है।

iris %>% group_by(Species) %>% mm 

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

उत्तर

34

जैसा कि ?do में दिखाया गया है, आप अपनी अभिव्यक्ति में . वाले समूह को संदर्भित कर सकते हैं। अधिक आम तौर पर

iris %>% group_by(Species) %>% do(.[1:5, ]) 

# Source: local data frame [15 x 5] 
# Groups: Species 
# 
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1   5.1   3.5   1.4   0.2  setosa 
# 2   4.9   3.0   1.4   0.2  setosa 
# 3   4.7   3.2   1.3   0.2  setosa 
# 4   4.6   3.1   1.5   0.2  setosa 
# 5   5.0   3.6   1.4   0.2  setosa 
# 6   7.0   3.2   4.7   1.4 versicolor 
# 7   6.4   3.2   4.5   1.5 versicolor 
# 8   6.9   3.1   4.9   1.5 versicolor 
# 9   5.5   2.3   4.0   1.3 versicolor 
# 10   6.5   2.8   4.6   1.5 versicolor 
# 11   6.3   3.3   6.0   2.5 virginica 
# 12   5.8   2.7   5.1   1.9 virginica 
# 13   7.1   3.0   5.9   2.1 virginica 
# 14   6.3   2.9   5.6   1.8 virginica 
# 15   6.5   3.0   5.8   2.2 virginica 

, dplyr वाले समूहों के लिए एक कस्टम समारोह लागू करने के लिए, आप निम्न (धन्यवाद @docendodiscimus) की तरह कुछ कर सकते हैं:: निम्नलिखित अपने ddply उत्पादन को दोहराने जाएगा

iris %>% group_by(Species) %>% do(mm(.)) 
+6

+1 प्लस , यदि ओपी अपने कस्टम फ़ंक्शन का उपयोग करना चाहता है, तो वह यह भी कर सकता है: 'आईरिस%>% group_by (प्रजातियां)%>% करें (मिमी (।)) 'या बस' आईरिस%>% group_by (प्रजातियां)% >% करें (सिर (।, 5)) ' –

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

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