2012-04-02 50 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