दिलचस्प पोस्ट
केवल एक समय में चलने वाले कार्य का एक सेट करें स्क्रॉल डाउन पर फ़ेड इन करें, फलक आउट ऑन स्क्रॉल अप – विंडो में तत्व की स्थिति के आधार पर "Git init" और "git init -bare" के बीच अंतर क्या है? जब सीएसएस 3 स्केल के साथ किसी तत्व को स्केल किया जाता है, तो यह एनीमेशन पूरा होने के ठीक तब तक पिक्सलेट हो जाता है। मैं सीमा के साथ एक तत्व को एनिमेट कर रहा हूं एक यूआईएलबल में स्थान / पैडिंग जोड़ना preg_match विशेष वर्ण एचटीएमएल: लिंक को नए टैब में खोलने के लिए मजबूर कैसे करें, नई विंडो में नहीं getElementsByTagName () textNodes के बराबर है एडीपी प्लग-इन की तुलना में लाइब्रेरी अधिक हाल ही में प्रदर्शित करता है कई पाइपलाइन मापदंडों के साथ एक टेम्पलेट कॉलिंग Read () और fread () में क्या अंतर है? NSUserDefaults में एक NSDate भंडारण का इष्टतम तरीका क्या है? क्या लैम्ब्डा फ़ंक्शंस / अभिव्यक्तियों के साथ समर्थित है? वर्किंग कॉपी XXX लॉक और एसवीएन में क्लीनअप विफल MySQL JDBC ड्राइवर 5.1.33 – टाइम ज़ोन अंक

समूह द्वारा एक चर योग कैसे करें?

मान लें कि मेरे पास डेटा के दो स्तंभ हैं I सबसे पहले "प्रथम", "दूसरा", "तीसरा" आदि जैसे श्रेणियां शामिल हैं। दूसरे नंबर पर नंबर है, जो मैंने "प्रथम" को देखा था।

उदाहरण के लिए:

Category Frequency First 10 First 15 First 5 Second 2 Third 14 Third 20 Second 3 

मैं श्रेणी के अनुसार डेटा को सॉर्ट करना चाहता हूं और आवृत्तियों को जोड़ना चाहता हूं:

 Category Frequency First 30 Second 5 Third 34 

मैं आर में यह कैसे करूँगा?

Solutions Collecting From Web of "समूह द्वारा एक चर योग कैसे करें?"

aggregate का उपयोग करना:

 aggregate(x$Frequency, by=list(Category=x$Category), FUN=sum) Category x 1 First 30 2 Second 5 3 Third 34 

(embedding @thelatemail टिप्पणी), aggregate में एक सूत्र अंतरफलक भी है

 aggregate(Frequency ~ Category, x, sum) 

या यदि आप एकाधिक कॉलम एकत्र करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं . संकेतन (एक स्तंभ के लिए भी काम करता है)

 aggregate(. ~ Category, x, sum) 

या tapply :

 tapply(x$Frequency, x$Category, FUN=sum) First Second Third 30 5 34 

इस डेटा का उपयोग करना:

 x <- data.frame(Category=factor(c("First", "First", "First", "Second", "Third", "Third", "Second")), Frequency=c(10,15,5,2,14,20,3)) 

हाल ही में, आप उस उद्देश्य के लिए dplyr पैकेज का भी उपयोग कर सकते हैं:

 library(dplyr) x %>% group_by(Category) %>% summarise(Frequency = sum(Frequency)) #Source: local data frame [3 x 2] # # Category Frequency #1 First 30 #2 Second 5 #3 Third 34 

या, एक से अधिक सारांश कॉलम के लिए (एक कॉलम के साथ भी कार्य करता है):

 x %>% group_by(Category) %>% summarise_each(funs(sum)) 

Dplyr> = 0.5 के लिए अद्यतन: summarise_each को summarise_all , summarise_at और summarise_if में बदल दिया गया है- dplyr में फ़ंक्शन के परिवार।

या, अगर आपके द्वारा समूह में एकाधिक कॉलम हैं, तो आप उन सभी को समूह में निर्दिष्ट कर सकते group_by कॉमा से अलग करके:

 mtcars %>% group_by(cyl, gear) %>% # multiple group columns summarise(max_hp = max(hp), mean_mpg = mean(mpg)) # multiple summary columns 

%>% ऑपरेटर सहित अधिक जानकारी के लिए, dplyr का परिचय देखें

आरसीएस द्वारा दिए गए उत्तर काम करता है और सरल है। हालांकि, यदि आप बड़े डेटासेट को संभाल रहे हैं और प्रदर्शन को बढ़ावा देने की आवश्यकता है तो एक तेज़ विकल्प है:

 library(data.table) data = data.table(Category=c("First","First","First","Second","Third", "Third", "Second"), Frequency=c(10,15,5,2,14,20,3)) data[, sum(Frequency), by = Category] # Category V1 # 1: First 30 # 2: Second 5 # 3: Third 34 system.time(data[, sum(Frequency), by = Category] ) # user system elapsed # 0.008 0.001 0.009 

चलिए आंकड़ों के मुताबिक एक ही बात की तुलना करें ऊपर और उपरोक्त उपरोक्त:

 data = data.frame(Category=c("First","First","First","Second","Third", "Third", "Second"), Frequency=c(10,15,5,2,14,20,3)) system.time(aggregate(data$Frequency, by=list(Category=data$Category), FUN=sum)) # user system elapsed # 0.008 0.000 0.015 

और यदि आप कॉलम रखना चाहते हैं तो यह वाक्यविन्यास है:

 data[,list(Frequency=sum(Frequency)),by=Category] # Category Frequency # 1: First 30 # 2: Second 5 # 3: Third 34 

बड़ा डेटासेट के साथ अंतर अधिक ध्यान देने योग्य होगा, जैसा कि नीचे दिए गए कोड को दर्शाता है:

 data = data.table(Category=rep(c("First", "Second", "Third"), 100000), Frequency=rnorm(100000)) system.time( data[,sum(Frequency),by=Category] ) # user system elapsed # 0.055 0.004 0.059 data = data.frame(Category=rep(c("First", "Second", "Third"), 100000), Frequency=rnorm(100000)) system.time( aggregate(data$Frequency, by=list(Category=data$Category), FUN=sum) ) # user system elapsed # 0.287 0.010 0.296 

एकाधिक एग्रीग्रेशन के लिए, आप lapply और गठबंधन जोड़ सकते हैं। lapply निम्नानुसार है

 data[, lapply(.SD, sum), by = Category] # Category Frequency # 1: First 30 # 2: Second 5 # 3: Third 34 

यह कुछ इस प्रश्न से संबंधित है

आप केवल () फ़ंक्शन का उपयोग भी कर सकते हैं:

 x2 <- by(x$Frequency, x$Category, sum) do.call(rbind,as.list(x2)) 

उन अन्य संकुल (प्लायरा, नयी आकृति) को डेटा वापस करने का लाभ मिलता है, लेकिन यह () से परिचित होने के योग्य है क्योंकि यह आधार फ़ंक्शन है।

 library(plyr) ddply(tbl, .(Category), summarise, sum = sum(Frequency)) 

बस एक तीसरा विकल्प जोड़ने के लिए:

 require(doBy) summaryBy(Frequency~Category, data=yourdataframe, FUN=sum) 

संपादित करें: यह एक बहुत पुराना उत्तर है। अब मैं @docendo उत्तर के रूप में, group_by के उपयोग की सिफारिश करेगा और dplyr से संक्षेप करेगा।

यदि x आपके डेटा के साथ एक डाटाफ्रेम है, तो निम्न आप जो चाहें करेंगे:

 require(reshape) recast(x, Category ~ ., fun.aggregate=sum) 

कई सालों बाद, बस एक और सरल आधार आर समाधान जोड़ने के लिए जो यहां किसी कारण के लिए मौजूद नहीं xtabs

 xtabs(Frequency ~ Category, df) # Category # First Second Third # 30 5 34 

या यदि एक data.frame वापस data.frame

 as.data.frame(xtabs(Frequency ~ Category, df)) # Category Freq # 1 First 30 # 2 Second 5 # 3 Third 34 

जब तक मैं हाल ही में इन प्रकार के कार्यों के लिए dplyr परिवर्तित हो गया हूं, तो कुछ चीजों के लिए sqldf पैकेज अभी भी वाकई अच्छा (और sqldf और अधिक पठनीय) है

यहां इस बात का एक उदाहरण है कि इस प्रश्न का उत्तर sqldf साथ किया जा सकता है

 x <- data.frame(Category=factor(c("First", "First", "First", "Second", "Third", "Third", "Second")), Frequency=c(10,15,5,2,14,20,3)) sqldf("select Category ,sum(Frequency) as Frequency from x group by Category") ## Category Frequency ## 1 First 30 ## 2 Second 5 ## 3 Third 34