2012-04-02 53 views
1

我中的R巨大data.table含有實驗的結果:對於每一個結果是,在運行的id和配置參數被包含在其他兩行。每次運行參數conf都是不變的。看到這個簡化的例子:GROUPBY在data.table:使用第一值

> 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 

我要計算每個運行值的手段,我可​​以通過這樣做:

> 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 

我也想給conf值添加到每個的聚合中的行。事實上,我可以通過使用conf列的mean函數來獲得此結果。但是:這是沒用的CONF價值根本不會改變每個runid爲:

> 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 

是否有另一種選擇在這裏這哈克均值功能?就像我可以用來聚合的「第一」功能(或「最後一個」,它不介意在這種情況下)?

回答

1

好,我知道,就像我完成了這個問題,在IRC的答案。正如我已經張貼了這個問題,也許有人認爲這可用雖然結果是很明顯的:

爲了得到第一個結果,只需使用column[1]。所以上面的例子歸結爲:

> x[,list(conf=conf[1], 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 
+0

不要忘了接受你自己的答案。 – ROLO 2012-04-02 10:14:32

+0

我可以在2天內完成此操作 – theomega 2012-04-02 10:19:24