जवाब rcs द्वारा प्रदान किया गया काम करता है और सरल है। हालाँकि, यदि आप बड़े डेटासेट को संभाल रहे हैं और एक प्रदर्शन को बढ़ावा देने की आवश्यकता है तो एक तेज़ विकल्प है:
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
और .SD
निम्नानुसार
data[, lapply(.SD, sum), by = Category]
# Category Frequency
# 1: First 30
# 2: Second 5
# 3: Third 34
rowsum
।