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

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

非常感谢您的帮助!


+1 给我们提供数据并展示所需结果。 - Paul Hiemstra
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

谢谢@Arun,我非常感激。简单易用,无需添加额外的包! - stefano

3
我会使用plyr来完成这个任务:
library(plyr)
ddply(DB, .(ID), summarise, mx = max(DISTANCE), TIME = TIME[which.max(DISTANCE)])

ddply 根据 ID 中的级别对 data.frame 进行切片。然后对于每个子集,它计算 max(DISTANCE) 并使用 which.max 找到相关的 TIME


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接