a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
r<-sapply(split(a.3,a.2),function(x) which.max(x$b.2))
a.3[r,]
возвращает индекс списка, не индекс для всего data.frame
Я пытаюсь возвратить самое большое значение b.2
для каждой подгруппы a.2
. Как я могу сделать это эффективно?
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
Ответ Джонатана Чанга дает вам то, о чем вы явно просили, но я предполагаю, что вам нужна фактическая строка из фрейма данных.
sel <- ave(b.2, a.2, FUN = max) == b.2
a.3[sel,]
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
m<-split(a.3,a.2)
u<-function(x){
a<-rownames(x)
b<-which.max(x[,2])
as.numeric(a[b])
}
r<-sapply(m,FUN=function(x) u(x))
a.3[r,]
Это помогает, хотя и несколько громоздко ... Но это позволяет мне получать строки для наибольших групповых значений. Есть еще идеи?
library(plyr)
ddply(a.3, "a.2", subset, b.2 == max(b.2))
> a.2<-sample(1:10,100,replace=T)
> b.2<-sample(1:100,100,replace=T)
> tapply(b.2, a.2, max)
1 2 3 4 5 6 7 8 9 10
99 92 96 97 98 99 94 98 98 96