如何根据R中的条件获取相关变量

时间:2013-03-29 10:19:52

标签: r function plyr

嗨,所有社区成员, 我检查了所有相关问题,但我无法找到解决方案。 我有以下数据库

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列的相关值?

非常感谢您的帮助!

2 个答案:

答案 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