La risposta fornita da rcs funziona ed è semplice. Tuttavia, se si sta gestendo set di dati più grandi e hanno bisogno di un incremento delle prestazioni v'è una alternativa più veloce:
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
Mettiamo a confronto che, per la stessa cosa utilizzando i dati.telaio e il sopra sopra:
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
E se si desidera mantenere la colonna questa è la sintassi:
data[,list(Frequency=sum(Frequency)),by=Category]
# Category Frequency
# 1: First 30
# 2: Second 5
# 3: Third 34
La differenza diventerà più evidente con set di dati più grandi, come il codice qui sotto dimostra:
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
Per più aggregazioni, è possibile combinare lapply
e 0.123.880,366 milacome segue
data[, lapply(.SD, sum), by = Category]
# Category Frequency
# 1: First 30
# 2: Second 5
# 3: Third 34
@AndrewMcKinlay, R usa la tilde per definire formule simboliche, per statistiche e altre funzioni. Può essere interpretato come * "modello di frequenza per categoria" * o * "frequenza in base alla categoria" *.Non tutte le lingue usano un operatore speciale per definire una funzione simbolica, come fatto in R qui. Forse con quella "interpretazione in linguaggio naturale" dell'operatore di tilde, diventa più significativo (e persino intuitivo). Personalmente trovo questa rappresentazione simbolica delle formule migliore di alcune delle alternative più prolisse. – r2evans