嗨,所有社区成员, 我检查了所有相关问题,但我无法找到解决方案。 我有以下数据库
DB<-data.frame(ID=rep((1:10),10),DISTANCE=1:100,TIME=rep(1:20))
并且我想获得具有相关TIME的每个ID的列DISTANCE的最大值,即:
result<-data.frame(ID=1:10,DISTANCE=91:100,TIME=11:20)
我已经知道了
aggregate(DB$DISTANCE,by=list(DB$ID),max)
可以完成部分工作,那么如何根据每个ID的DISTANCE最大值获取TIME列的相关值?
非常感谢您的帮助!
答案 0 :(得分: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
答案 1 :(得分:3)
我使用plyr
:
library(plyr)
ddply(DB, .(ID), summarise, mx = max(DISTANCE), TIME = TIME[which.max(DISTANCE)])
ddply
根据data.frame
中的级别调整ID
。然后,对于每个子集,它会计算max(DISTANCE)
,并使用TIME
找到关联的which.max
。