data.table (II): agregaciones

Sigo con mi lacónica serie sobre data.table.

La protagonista:

1
2
3
4
5
6
7
frases[sample(1:nrow(frases), 3),]
#pos.es pos.en length.es length.en en        es frase          tfe      qjilm          num
#1:     15     43        72        72  i        de  2632 4.881416e-02 0.01369863 6.686871e-04
#2:     33     48        46        48  X    países  5321 2.726146e-06 0.02040816 5.563563e-08
#3:      2     35        53        66 in preguntar  4582 2.424379e-08 0.01492537 3.618476e-10
dim(frases)
#[1] 6340091      10

El tiempo:

1
2
3
4
5
6
7
8
9
system.time({
    setkey(frases, "frase", "es")
    denominadores <- frases[, sum(num), by = key(frases)]
    setnames(denominadores, c("frase", "es", "den") )
    frases <- merge(frases, denominadores)
    frases$delta <- frases$num / frases$den
})
#user  system elapsed
#5.628   0.208   5.841

En particular,

1
2
3
system.time( denominadores <- frases[, sum(num), by = key(frases)] )
#user  system elapsed
#0.228   0.000   0.228

Increíble, ¿no?