我想在我要为其选择的数据框中选择前 n 行
计算了代表变量总和的列n
。例如,
使用mtcars
数据,我想进行过滤以仅保留两个cyl
与mpg
的最大和。在以下示例中,我期望
选择cyl == 4
和cyl == 8
的所有行。它必须很简单,但是
我无法弄清楚我的错误。
library(tidyverse)
mtcars %>%
group_by(cyl) %>%
summarise(sum(mpg))
#> # A tibble: 3 x 2
#> cyl `sum(mpg)`
#> <dbl> <dbl>
#> 1 4 293.
#> 2 6 138.
#> 3 8 211.
mtcars %>%
group_by(cyl) %>% # Calculate the sum of mpg for each cyl
add_tally(mpg, sort = TRUE) %>%
ungroup() %>%
top_n(2, n)
#> # A tibble: 11 x 12
#> mpg cyl disp hp drat wt qsec vs am gear carb n
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 293.
#> 2 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 293.
#> 3 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 293.
#> 4 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1 293.
#> 5 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2 293.
#> 6 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1 293.
#> 7 21.5 4 120. 97 3.7 2.46 20.0 1 0 3 1 293.
#> 8 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1 293.
#> 9 26 4 120. 91 4.43 2.14 16.7 0 1 5 2 293.
#> 10 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2 293.
#> 11 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2 293.
由reprex package(v0.3.0)于2019-07-26创建
答案 0 :(得分:2)
似乎top_n
在订购数据框后返回了最前n
行,如果有联系,则返回了多于n
行。它不返回具有不同的前n
个顶部值的行。
摘自文档-
用法
top_n(x,n,wt)
参数
x:要过滤的tbl()
n:要返回的行数。如果x被分组, 这是每组的行数。 如果包含的行将超过n行 有联系。如果n为正,则选择前n行。如果是负数, 选择底部的n行。
您需要,如@tmfmnk所建议-
mtcars %>%
group_by(cyl) %>%
add_tally(mpg, sort = TRUE) %>%
ungroup() %>%
filter(dense_rank(desc(n)) < 3)