Gewichtete Tabellen mit R / Summe numerischer Werte je Kategorie

Der normale Tabellenbefehl table() berechnet die Häufigkeit jedes Elements eines Vektors, etwa so:

R> df <- data.frame(var = c("A", "A", "B", "B", "C", "C", "C"))
R> table(df)
df
A B C 
2 2 3 

Er sagt uns also, dass wir zweimal A und B und dreimal C haben.

Haben wir aber eine Situation wie diese:

df <- data.frame(var = c("A", "A", "B", "B", "C", "C", "C"), value = c(10, 20, 20, 40, 15, 25, 35))

also eine kategoriale Variable var und eine numerische Variable value, und wollen für jede Kategorie die Summe über die numerische Variable, dann nehmen wir einfach den Base-R-Befehl aggregate, etwa so

R> aggregate(value ~ var, data = df, FUN = sum)
  var wt
1   A 40
2   B 60
3   C 70

Da ich auch oft das Paket data.table nutze, hier noch eine einfache Lösung damit; angenommen, wir machen (bzw. haben eine Datentabelle aus einer anderen Quelle, etwa fread)

library("data.table")
dt <- data.table(df)

Dann können wir einfach über eine Spalte in Abhängigkeit von einer anderen summieren, etwa so (und den Wert einer neuen Variablen tot zuweisen):

setDT(dt)[, .(n = sum(value)), var]