如何筛选到指定列的前 n 个?

How to filter to top n for specified column?

我试图通过测量每个碳水化合物的 AVGMPG 来找到前 n 个圆柱体,然后忽略数据框中的所有其他内容。我的实际问题涉及通过衡量成交率来确定市场上的顶级销售人员。希望这将使我更清楚我正在尝试做什么。有没有办法轻松做到这一点?

> mtcars.1 <- mtcars %>%
+   group_by(carb,cyl) %>%
+   summarise(AVGMPG = mean(mpg))
> mtcars.1
# A tibble: 9 x 3
# Groups:   carb [?]
   carb   cyl AVGMPG
  <dbl> <dbl>  <dbl>
1     1     4   27.6
2     1     6   19.8
3     2     4   25.9
4     2     8   17.2
5     3     8   16.3
6     4     6   19.8
7     4     8   13.2
8     6     6   19.7
9     8     8   15

我们可以试试

library(dplyr)
n <- 3
mtcars %>% 
   group_by(carb) %>% 
   mutate(AVGMPG = mean(mpg)) %>%  
   group_by(cyl) %>%     
   top_n(n, AVGMPG) %>%
   select(carb, cyl, AVGMPG)

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

这会计算 carbcylmpg 的平均值,按 AVGMPGcarb 组排序并选择顶部 3 元素,然后它会丢弃所有其他列。