2013-03-29 3 views
3

Привет всем членам сообщества, Я проверяю все связанные вопросы, но мне не удалось найти решение для этого. У меня есть следующие DBКак получить связанные переменные в соответствии с условием в R

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

, и я хочу, чтобы получить максимальное значение для ХОДЬБЫ столбца для каждого идентификатора с соответствующим временем, то есть:

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

Я уже знает, что

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

может выполнять часть работы, поэтому как я могу получить связанное значение для столбца TIME в соответствии с максимальным значением DISTANCE для каждого идентификатора?

Большое спасибо за помощь!

+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

Спасибо, @Arun, я очень ценю .. легко и без необходимости добавлять дополнительные пакеты! – stefano

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.

Смежные вопросы