Как я могу использовать arange в dplyr для заказа групп? - PullRequest
2 голосов
/ 29 апреля 2020

Я хотел бы сгруппировать данные, а затем расположить таблицу так, чтобы группы с самыми высокими значениями были показаны первыми. Например, в наборе данных mtcars я хотел бы сгруппировать автомобили по количеству цилиндров, а затем расположить таблицу так, чтобы группы с самым высоким средним значением mpg сначала отображались

mtcars %>% group_by (cyl)  %>% arrange (desc(mean (mpg)))

, что приводит к ошибке:

Error: incorrect size (1) at position 1, expecting : 32

причина, по которой я спрашиваю, заключается в том, что filter () при применении после group_by () применяется ко всей группе, а не к отдельным строкам.

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020

Хороший способ сделать это - превратить группирующую переменную в factor и использовать reorder (или forcats::fct_reorder) для управления порядком уровней. Тогда вы можете arrange по этому столбцу. (Группировка подразумевается в функциях reorder.)

library(dplyr)

mtcars %>%
  mutate(
    cyl = reorder(factor(cyl), -mpg) 
    # stats::reorder, built-in, uses mean by default
    # use -mpg to make it descending
  ) %>%
  arrange(cyl)

# alternately
library(forcats)
mtcars %>%
  mutate(
    cyl = fct_reorder(factor(cyl), mpg, .fun = mean, .desc = TRUE)
    # forcats::fct_reorder, uses median by default,
    # takes a .desc argument to make it descending
  ) %>%
  arrange(cyl)

Изменение данных, как это хорошо, потому что указанный порядок будет запоминаться и использоваться другими функциями (такими как упорядочение стержней или фасетов в ggplot).

0 голосов
/ 29 апреля 2020

Может быть, это? Сначала сгруппируйте по cyl, затем заполните новый столбец mean(mpg), который затем можно упорядочить по своему усмотрению, и, наконец, удалите временный столбец mean(mpg).

mtcars %>% 
  group_by(cyl) %>% 
  mutate(mean_mpg = mean(mpg)) %>%
  arrange(desc(mean_mpg)) %>%
  select(-mean_mpg)

#> # A tibble: 32 x 11
#> # Groups:   cyl [3]
#>      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <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
#>  2  24.4     4 147.     62  3.69  3.19  20       1     0     4     2
#>  3  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2
#>  4  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1
#>  5  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2
#>  6  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1
#>  7  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1
#>  8  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1
#>  9  26       4 120.     91  4.43  2.14  16.7     0     1     5     2
#> 10  30.4     4  95.1   113  3.77  1.51  16.9     1     1     5     2
#> # ... with 22 more rows

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...