Frage

Ich habe das folgende Beispiel data.table:

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

Ich möchte alle Spalten (a und b, obwohl sie getrennt gehalten werden sollten) nach der ID aggregieren colSums, Zum Beispiel.Was ist der richtige Weg, dies zu tun?Folgendes funktioniert nicht:

 dtb[,colSums, by="id"]

Dies ist nur ein Beispiel und meine Tabelle hat viele Spalten, daher möchte ich vermeiden, sie alle im Funktionsnamen anzugeben

War es hilfreich?

Lösung

Das ist tatsächlich das, wonach ich gesucht habe und das in den FAQ erwähnt wird:

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

Andere Tipps

Ich denke, in diesem Fall ist es am schnellsten, Ihre Daten zuerst in das Langformat zu bringen und als nächstes Ihre Aggregation durchzuführen (siehe Matthews Kommentare hier). SO posten):

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
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top