Question

J'ai l'échantillon suivant data.table:

dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))

Je voudrais regrouper toutes les colonnes (a et b, même si elles doivent être séparées) par identifiant en utilisant colSums, Par exemple.Quelle est la bonne façon de procéder ?Ce qui suit ne fonctionne pas :

 dtb[,colSums, by="id"]

Ceci n'est qu'un exemple et ma table comporte de nombreuses colonnes, je souhaite donc éviter de toutes les spécifier dans le nom de la fonction.

Était-ce utile?

La solution

c'est en fait ce que je cherchais et c'est mentionné dans la FAQ :

dtb[,lapply(.SD,mean),by="id"]

Autres conseils

Je suppose que dans ce cas, il est plus rapide de mettre d'abord vos données au format long et de procéder ensuite à votre agrégation (voir les commentaires de Matthew dans ce document). donc poste):

library(data.table)
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
library(reshape2)
dt_long <- as.data.table(melt(dtb, id.var="id"))
dt_long[, sum(value), by=c("id","variable")]
    id variable  V1
 1:  1        a 601
 2:  2        a 440
 3:  3        a 496
 4:  4        a 553
 5:  5        a 444
 6:  6        a 466
 7:  7        a 525
 8:  8        a 553
 9:  9        a 541
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top