выберите строки с самым большим значением переменной в группе в r

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. Как я могу сделать это эффективно?

9
задан skaffman 12 May 2010 в 22:18
поделиться

4 ответа

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,]
6
ответ дан 4 December 2019 в 08:14
поделиться
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,]

Это помогает, хотя и несколько громоздко ... Но это позволяет мне получать строки для наибольших групповых значений. Есть еще идеи?

1
ответ дан 4 December 2019 в 08:14
поделиться
library(plyr)
ddply(a.3, "a.2", subset, b.2 == max(b.2))
8
ответ дан 4 December 2019 в 08:14
поделиться
> 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 
1
ответ дан 4 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: