如何筛选到指定列的前 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
这会计算 carb
和 cyl
的 mpg
的平均值,按 AVGMPG
对 carb
组排序并选择顶部 3
元素,然后它会丢弃所有其他列。
我试图通过测量每个碳水化合物的 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
这会计算 carb
和 cyl
的 mpg
的平均值,按 AVGMPG
对 carb
组排序并选择顶部 3
元素,然后它会丢弃所有其他列。