আরসিএসের দেওয়া উত্তরটি কাজ করে এবং সহজ। তবে, আপনি যদি আরও বড় ডেটাসেট পরিচালনা করছেন এবং পারফরম্যান্স বুস্টের প্রয়োজন হয় তবে একটি দ্রুত বিকল্প আছে:
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
।