3

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

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

并且我想获得具有相关时间的每个 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列的相关值?

非常感谢您的帮助!

4

2 回答 2

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
于 2013-03-29T10:28:08.863 回答
3

我会这样做plyr

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

ddplydata.frame根据 中的级别切分ID。然后对于每个子集,它计算max(DISTANCE)并使用 找到关联TIMEwhich.max

于 2013-03-29T10:30:19.910 回答