Ich habe eine große data.table
in R, die das Ergebnis eines Experiments enthält: Für jedes Ergebnis ist die ID des Laufs und der Konfigurationsparameter in zwei anderen Zeilen enthalten. Der Parameter conf
ist für jeden Lauf konstant. Sehen Sie dieses vereinfachte Beispiel:groupBy in data.table: Verwenden Sie den ersten Wert
> x=data.table(runId=rep(c(1,2,3,4,5,6),each=5),conf=rep(c(10,10,500,500,1000,1000), each=5), value=runif(30,1, 1000))
> x
runId conf value
1 10 102.17366
1 10 739.31317
1 10 361.83867
1 10 915.05966
1 10 435.11605
2 10 254.13930
2 10 482.93782
2 10 598.34327
2 10 401.45823
2 10 480.17624
3 500 831.03700
3 500 378.53013
3 500 371.75072
3 500 61.27925
3 500 425.50863
4 500 557.64415
4 500 731.07127
4 500 836.31104
4 500 138.61641
4 500 106.12334
5 1000 925.24886
5 1000 840.06707
5 1000 680.79559
5 1000 402.77619
5 1000 507.21966
6 1000 111.93297
6 1000 100.88960
6 1000 149.17332
6 1000 444.28845
6 1000 654.86640
Ich möchte für jeden Lauf die Mittel der Werte berechnen, kann ich dies tun, indem Sie:
> x[,list(mean=mean(value)),by=runId]
runId mean
[1,] 1 634.1549
[2,] 2 275.1270
[3,] 3 328.4098
[4,] 4 584.1364
[5,] 5 616.1647
[6,] 6 411.2354
Ich möchte auch den conf
Wert zu jedem hinzufügen die Zeilen im Aggregat. Tatsächlich kann ich dieses Ergebnis erhalten, indem ich auch die mean
Funktion der Spalte conf
benutze. Aber: Das ist nutzlos, da der Conf-Wert überhaupt nicht für jeden RunID ändert:
> x[,list(conf=mean(conf),mean=mean(value)),by=runId]
runId conf mean
[1,] 1 10 634.1549
[2,] 2 10 275.1270
[3,] 3 500 328.4098
[4,] 4 500 584.1364
[5,] 5 1000 616.1647
[6,] 6 1000 411.23
Gibt es eine andere Alternative zu dieser Hacky mean-Funktion hier? Etwas wie eine "erste" Funktion (oder eine "letzte", es macht mir in diesem Fall nichts aus), die ich zum Aggregieren verwenden kann?
Vergessen Sie nicht, Ihre eigene Antwort zu akzeptieren. – ROLO
Ich kann das in 2 Tagen tun – theomega