J'ai une trame de données qui ressemble à ceci:sélectionner plusieurs lignes à partir d'une trame de données d'une valeur égale à la valeur la plus élevée par groupe
query <- c('a','a','a','b','b','b','c','c','c')
hit <- c(1,2,3,4,5,6,7,8,9)
score <- c(97,97,96,98,97,96,99,99,98)
df <- data.frame(query,hit,score)
df
query hit score
1 a 1 97
2 a 2 97
3 a 3 96
4 b 4 98
5 b 5 97
6 b 6 96
7 c 7 99
8 c 8 99
9 c 9 98
Je veux groupe sur la première colonne, et sélectionnez toutes les lignes avec un score égal au score le plus élevé pour ce groupe. A propos de la plus proche, je peux comprendre est d'utiliser top_n comme ceci:
df %>%
+ group_by(query) %>%
+ top_n(2,score)
A Tibble: 6 x 3
Groupes: requête [3]
query hit score
<fctr> <dbl> <dbl>
1 a 1 97
2 a 2 97
3 b 4 98
4 b 5 97
5 c 7 99
6 c 8 99
Mais évidemment, tout ce qui est fait est en me donnant les deux premiers (ou tout ce que je spécifie). Le résultat que je veux finir avec regarderait plus comme ceci:
query hit score
<fctr> <dbl> <dbl>
1 a 1 97
2 a 2 97
3 b 4 98
5 c 7 99
6 c 8 99
Comme d'habitude, je suppose que je manque quelque chose assez simple.