使用add_tally和top_n函数选择R中的顶部行

时间:2019-07-26 17:57:37

标签: r tidyverse

我想在我要为其选择的数据框中选择前 n 行 计算了代表变量总和的列n。例如, 使用mtcars数据,我想进行过滤以仅保留两个cylmpg的最大和。在以下示例中,我期望 选择cyl == 4cyl == 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创建

1 个答案:

答案 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)