2013-03-29 35 views
3

嗨,所有的社區成員, 我檢查所有相關的問題,但我無法找到解決方案。 我有以下DB如何根據條件獲取相關變量R

DB<-data.frame(ID=rep((1:10),10),DISTANCE=1:100,TIME=rep(1:20)) 

,我想爲柱距的最大值​​與相應時間段的每個ID,即:

result<-data.frame(ID=1:10,DISTANCE=91:100,TIME=11:20) 

我已經知道

aggregate(DB$DISTANCE,by=list(DB$ID),max) 

可以完成部分工作,那麼如何根據每個ID的DISTANCE的最大值來獲得列TIME的相關值?

非常感謝您的幫助!根據ID水平

library(plyr) 
ddply(DB, .(ID), summarise, mx = max(DISTANCE), TIME = TIME[which.max(DISTANCE)]) 

ddply削減了data.frame

+0

+1給我們的數據,並顯示所需的結果。 –

回答

3

您應該使用merge得到TIME列回:

DB.a <- aggregate(data = DB, DISTANCE ~ ID, max) 
merge(DB.a, DB) 
# ID DISTANCE TIME 
# 1 1  91 11 
# 2 10  100 20 
# 3 2  92 12 
# 4 3  93 13 
# 5 4  94 14 
# 6 5  95 15 
# 7 6  96 16 
# 8 7  97 17 
# 9 8  98 18 
# 10 9  99 19 
+0

謝謝@阿倫,我真的很感激。很容易,不需要添加額外的包裹! – stefano

3

我會做到這一點使用plyr。然後對於每個子集,它計算max(DISTANCE),並使用which.max找到關聯的TIME