如何过滤指定列的前n个?

时间:2019-03-28 12:45:30

标签: r rank

我试图通过对每种碳水化合物的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

2 个答案:

答案 0 :(得分:1)

我们可以尝试

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

答案 1 :(得分:1)

使用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

这将计算mpgcarb的{​​{1}}的平均值,按cylcarb组进行排序,然后选择顶部的AVGMPG元素,那么它将丢弃所有其他列。