ऐसा करने के लिए बहुत सारे विकल्प हैं। ध्यान दें कि यदि आप किसी अन्य समारोह sum
से अलग में रुचि रखते हैं, तो बस तर्क FUN=any.function
आदि बदलने के लिए, उदा, अगर आप mean
, var
length
चाहते हैं, है, तो बस FUN
तर्क, उदा, FUN=mean
, FUN=var
और इतने पर में उन कार्यों प्लग। आइए कुछ विकल्पों का पता लगाएं:
aggregate
आधार पर कार्य।
> aggregate(results ~ experiment, FUN=sum, data=DF)
experiment results
1 A 86.3
2 B 986.0
या हो सकता है tapply
?
> with(DF, tapply(results, experiment, FUN=sum))
A B
86.3 986.0
plyr पैकेज
> # library(plyr)
> ddply(DF[, -2], .(experiment), numcolwise(sum))
experiment results
1 A 86.3
2 B 986.0
> ## Alternative syntax
> ddply(DF, .(experiment), summarize, sumResults = sum(results))
experiment sumResults
1 A 86.3
2 B 986.0
इसके अलावा dplyr
पैकेज से
इसके अलावा ddply
> require(dplyr)
> DF %>% group_by(experiment) %>% summarise(sumResults = sum(results))
Source: local data frame [2 x 2]
experiment sumResults
1 A 86.3
2 B 986.0
sapply
और split
का उपयोग कर tapply
के बराबर।
> with(DF, sapply(split(results, experiment), sum))
A B
86.3 986.0
आप समय के बारे में चिंता कर रहे हैं, data.table
अपने दोस्त है:
> # library(data.table)
> DT <- data.table(DF)
> DT[, sum(results), by=experiment]
experiment V1
1: A 86.3
2: B 986.0
इतना लोकप्रिय नहीं है, लेकिन डोबी पैकेज अच्छा (aggregate
के बराबर है, यहां तक कि वाक्य रचना में!)
> # library(doBy)
> summaryBy(results~experiment, FUN=sum, data=DF)
experiment results.sum
1 A 86.3
2 B 986.0
इसके अलावा by
इस स्थिति
> (Aggregate.sums <- with(DF, by(results, experiment, sum)))
experiment: A
[1] 86.3
-------------------------------------------------------------------------
experiment: B
[1] 986
में आपकी मदद करता है नतीजा एक मैट्रिक्स तो उपयोग करना चाहते हैं या तो cbind
या rbind
> cbind(results=Aggregate.sums)
results
A 86.3
B 986.0
sqldf
sqldf पैकेज से भी एक अच्छा विकल्प
> library(sqldf)
> sqldf("select experiment, sum(results) `sum.results`
from DF group by experiment")
experiment sum.results
1 A 86.3
2 B 986.0
xtabs
भी काम करता है (केवल जब FUN=sum
)
> xtabs(results ~ experiment, data=DF)
experiment
A B
86.3 986.0
+1 यह उससे कहीं अधिक व्यापक नहीं मिलता है हो सकता है ... –