Возможное решение с data.table
data(mtcars)
setDT(mtcars)
mtcars[,AVGMPG := mean(mpg), keyby = list(carb, cyl)]
mtcars[order(-AVGMPG),head(.SD, n = 3), by = carb][,.(carb, cyl, AVGMPG)]
carb cyl AVGMPG
1: 1 4 27.58
2: 1 4 27.58
3: 1 4 27.58
4: 2 4 25.90
5: 2 4 25.90
6: 2 4 25.90
7: 4 6 19.75
8: 4 6 19.75
9: 4 6 19.75
10: 6 6 19.70
11: 3 8 16.30
12: 3 8 16.30
13: 3 8 16.30
14: 8 8 15.00
Это вычисляет среднее значение mpg
для carb
и cyl
, упорядочьте carb
-группы по AVGMPG
и выберитеtop 3
элементов, затем отбрасывает все остальные столбцы.