2012-03-23 18 views
30

द्वारा सारांश आंकड़े कैसे प्राप्त करें मैं एक शॉट में वर्गीकृत कॉलम द्वारा समूहित आर-प्लस/एस प्लस में कई सारांश आंकड़े प्राप्त करने का प्रयास कर रहा हूं। मैंने कुछ कार्यों को पाया लेकिन उनमें से सभी एक कॉल प्रति आंकड़े करते हैं, जैसे कुल।समूह

data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66, 71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59) 
grp <- factor(rep(LETTERS[1:4], c(4,6,6,8))) 
df <- data.frame(group=grp, dt=data) 
mg <- aggregate(df$dt, by=df$group, FUN=mean)  
mg <- aggregate(df$dt, by=df$group, FUN=sum)  

मैं क्या देख रहा हूँ, एक कॉल में मतलब, न्यूनतम, अधिकतम, एसटीडी की तरह एक ही समूह, ... आदि के लिए कई आंकड़े प्राप्त कर सकते है कि संभव है?

+2

के साथ एक यह एक है एकाधिक उत्तरों के साथ एक सुंदर बुनियादी सवाल। आप आरसीक [(LINK)] (http://www.rseek.org/) और एसओएस लाइब्रेरी [(LINK)] से परिचित नहीं हो सकते हैं (http://cran.r-project.org/web/packages/ sos/index.html) प्रश्नों के उत्तर जानने में आपकी सहायता के लिए दोनों महान संसाधन हैं। उन संसाधनों के साथ इबेट आप सेकंड में अपने प्रश्न का उत्तर देने में सक्षम होंगे। –

+0

'डेटा <- c (' line। – BenBarnes

उत्तर

9

plyr पैकेज पर एक नज़र डालें। विशेष रूप से, ddply

ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt)) 
0

सबसे पहले, यह आर के अपने संस्करण पर निर्भर करता है आप 2.11 से पारित कर दिया है, तो आप एक से अधिक परिणाम कार्यों (सारांश, उदाहरण के द्वारा, या अपने स्वयं समारोह) के साथ aggreggate उपयोग कर सकते हैं। यदि नहीं, तो आप जस्टिन द्वारा किए गए उत्तर का उपयोग कर सकते हैं।

9

इस बारे में जाने के लिए कई अलग अलग तरीकों है, लेकिन मैं psych पैकेज में describeBy को आंशिक हूँ:

describeBy(df$dt, df$group, mat = TRUE) 
62

मैं tapply() के लिए मेरे दो सेंट में डाल देता हूँ।

tapply(df$dt, df$group, summary) 

आप उन विशिष्ट आंकड़ों के साथ एक कस्टम फ़ंक्शन लिख सकते हैं, जिन्हें आप सारांश को प्रतिस्थापित करना चाहते हैं।

+0

के अंत में एक अतिरिक्त कॉमा है, मैं परिणाम वैज्ञानिक प्रारूप में कैसे प्राप्त कर सकता हूं? – maximusyoda

+0

@maximusyoda, वैज्ञानिक नोटेशन प्राप्त करने के लिए, 'सारांश' के बजाय एक कस्टम फ़ंक्शन का उपयोग करें जैसे: 'tapply (df $ dt, df $ group, function (x) प्रारूप (सारांश (x), वैज्ञानिक = TRUE)) – BenBarnes

3

describeBy के अलावा, doBy पैकेज एक और विकल्प है। यह एसएएस प्रोक सारांश की अधिक कार्यक्षमता प्रदान करता है। विवरण: http://www.statmethods.net/stats/descriptives.html

+0

डेटा को सारणीबद्ध करने के लिए एक और त्वरित तरीका (वर्णनात्मक आंकड़ों के बिना) 'descr' पैकेज में' freq' फ़ंक्शन का उपयोग करना है। यह कड़ाई से नहीं है कि आपने क्या पूछा है, लेकिन अभी भी निर्देशक हो सकता है। विवरण: http://www.rdocumentation.org/packages/descr/functions/freq – dwstu

2

मुझे अभी एक अद्भुत आर पैकेज tables मिला है। आप जितनी चाहें उतनी श्रेणियों से डेटा को टैबलेट कर सकते हैं और एकाधिक चर के लिए कई आंकड़ों की गणना कर सकते हैं - यह वाकई अद्भुत है!

लेकिन प्रतीक्षा करें, और भी कुछ है! पैकेज में आपके दस्तावेज़ों के लिए आसान आयात के लिए आपके टेबल के लिए लाटेक्स कोड जेनरेट करने के लिए फ़ंक्शन हैं।

library('dplyr') 
df %>% group_by(group) %>% summarize(mean=mean(dt), sum=sum(dt)) 
22

dplyr पैकेज इस समस्या के लिए अच्छा विकल्प हो सकता है। समूह में data_frame को विभाजित करने के लिए split का उपयोग करें, फिर प्रत्येक समूह में summary फ़ंक्शन को लागू करने के लिए map का उपयोग करें।

library(purrr) 

df %>% split(.$group) %>% map(summary) 
+0

हम dplyr –

+4

का उपयोग करके पहली चतुर्भुज और तीसरी चतुर्भुज जानकारी प्राप्त नहीं कर सकते हैं हां, आप कर सकते हैं - df%>% group_by (समूह)%>% सारांश (q1 = क्वांटाइल (डीटी, 0.25), q3 = क्वांटाइल (डीटी, 0.75)) –

6

हैडली विकहैम के purrr पैकेज का उपयोग करते हुए इस काफी सरल है:

+0

डीएफ%>% group_by (समूह)%>% do (data.frame (सारांश (।))) dplyr – AlexR

+0

में कुछ ऐसा करना चाहिए ऐसा लगता है कि बेस आर का उपयोग करके 'tapply' दृष्टिकोण के समान उत्पादन का उत्पादन होता है। – dsaxton

1

5 लंबे वर्षों के बाद मुझे यकीन है कि बहुत ज्यादा नहीं ध्यान इस उत्तर के लिए प्राप्त किया जा रहा है, लेकिन फिर भी सभी विकल्प पूरा करने के लिए कर रहा हूँ, यहाँ data.table

library(data.table) 
setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)] 
# group mean_gr sum_gr 
#1:  A  61 244 
#2:  B  66 396 
#3:  C  68 408 
#4:  D  61 488