La réponse fournie par rcs fonctionne et est simple. Toutefois, si vous êtes à la manipulation des plus grands ensembles de données et ont besoin d'un boost de performance il y a une meilleure solution:
> 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
Nous allons les comparer à la même chose en utilisant des données.image ci-dessus:
> 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
Et si vous voulez garder la colonne c'est la syntaxe:
> data[,list(Frequency=sum(Frequency)),by=Category]
Category Frequency
1: First 30
2: Second 5
3: Third 34
La différence sera plus perceptible avec les plus grands ensembles de données, comme le code ci-dessous montre:
> 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