2012-04-02 5 views
1

実験の結果を含むdata.tableのRには巨大なものがあります。それぞれの結果に対して、実行IDと構成パラメータは2つの他の行に含まれています。 confパラメータは、実行ごとに一定です。この簡単な例を参照してください。groupBy in 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

+0

私は2日でこれを行うことができます – theomega

関連する問題