Painotetut taulukot R:llä / numeeristen arvojen summa luokittain

Tavallinen taulukkokomento table() laskee vektorin jokaisen alkion frekvenssin näin:

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

Se kertoo siis, että meillä on kaksi A:ta ja B:tä ja kolme C:tä.

Jos tilanne on kuitenkin tällainen:

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

eli meillä on luokitteleva muuttuja var ja numeerinen muuttuja value, ja haluamme jokaiselle luokalle numeerisen muuttujan summan, voimme käyttää perus-R:n komentoa aggregate näin

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

Koska käytän usein myös data.table-pakettia, tässä vielä yksinkertainen ratkaisu sillä; oletetaan, että teemme (tai meillä on muualta saatu datataulukko, esim. freadilla)

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

Sitten voimme summata yhden sarakkeen toisen sarakkeen mukaan näin (ja tallentaa arvon uuteen muuttujaan tot):

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