我试图通过对每种碳水化合物的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
答案 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
这将计算mpg
和carb
的{{1}}的平均值,按cyl
对carb
组进行排序,然后选择顶部的AVGMPG
元素,那么它将丢弃所有其他列。