web-dev-qa-db-fra.com

Comment grouper data.table par plusieurs colonnes?

J'utilise le data.table package pour accélérer la collecte de statistiques récapitulatives sur un ensemble de données.

Je suis curieux de savoir s'il existe un moyen de regrouper plus d'une colonne. Mes données ressemblent à ceci:

  purchaseAmt        adShown        url
   15.54            00001         150000001
    4.82            00002         150000001
  157.99            05005         776300044
   ...               ...            ...

Je peux faire quelque chose comme ça:

adShownMedian <- df1[,median(purchaseAmt),by="adShown"]

pour obtenir la médiane de chaque annonce. Comment pourrais-je faire quelque chose qui combine adShown et url?

J'ai essayé ceci:

adShownMedian <- df1[,median(purchaseAmt),by=c("adShown","url")]

mais pas de chance.

Aucune suggestion?

59
screechOwl

Utilisez by=list(adShown,url) au lieu de by=c("adShown","url")

Exemple:

set.seed(007) 
DF <- data.frame(X=1:20, Y=sample(c(0,1), 20, TRUE), Z=sample(0:5, 20, TRUE))

library(data.table)
DT <- data.table(DF)
DT[, Mean:=mean(X), by=list(Y, Z)]


     X Y Z      Mean
 1:  1 1 3  1.000000
 2:  2 0 1  9.333333
 3:  3 0 5  7.400000
 4:  4 0 5  7.400000
 5:  5 0 5  7.400000
 6:  6 1 0  6.000000
 7:  7 0 3  7.000000
 8:  8 1 2 12.500000
 9:  9 0 5  7.400000
10: 10 0 2 15.000000
11: 11 0 4 14.500000
12: 12 0 1  9.333333
13: 13 1 1 13.000000
14: 14 0 1  9.333333
15: 15 0 2 15.000000
16: 16 0 5  7.400000
17: 17 1 2 12.500000
18: 18 0 4 14.500000
19: 19 1 5 19.000000
20: 20 0 2 15.000000
80
Jilber Urbina