R - как разбиться на терцили во время group_by - PullRequest
0 голосов
/ 27 мая 2020

Допустим, мы хотим вычислить среднюю длину чашелистника на основе терцильных групп ширины чашелистика.

Мы можем использовать функцию split_quantile из пакета fabricatr и сделать следующее:

iris %>% 
    group_by(split_quantile(Sepal.Width, 3)) %>% 
    summarise(Sepal.Length = mean(Sepal.Length))

Пока все хорошо. Теперь предположим, что мы хотим group_by(Species, split_quantile(Sepal.Width, 3)) вместо просто group_by(split_quantile(Sepal.Width, 3)).

Однако, что, если мы хотим, чтобы терцили были рассчитаны внутри для каждого типа вида, а не обычно?

В основном, что я ' m поиска может быть достигнуто путем разделения iris на несколько фреймов данных на основе Species, использования split_quantile в этих фреймах данных для вычисления терцилей и последующего объединения фреймов данных вместе. Однако я ищу способ сделать это без разделения фрейма данных.

1 Ответ

2 голосов
/ 27 мая 2020

Вы вроде бы написали ответ в своем тексте, но вы можете создать новую переменную для tercile после группировки по видам, а затем перегруппировать как Species, так и Tercile.

library(tidyverse)
library(fabricatr)
iris %>% 
    group_by(Species) %>%
    mutate(Tercile = split_quantile(Sepal.Width, 3)) %>%
    group_by(Species, Tercile) %>%
    summarise(Sepal.Length = mean(Sepal.Length))
#> # A tibble: 9 x 3
#> # Groups:   Species [3]
#>   Species    Tercile Sepal.Length
#>   <fct>      <fct>          <dbl>
#> 1 setosa     1               4.69
#> 2 setosa     2               5.08
#> 3 setosa     3               5.27
#> 4 versicolor 1               5.61
#> 5 versicolor 2               6.12
#> 6 versicolor 3               6.22
#> 7 virginica  1               6.29
#> 8 virginica  2               6.73
#> 9 virginica  3               6.81

Создано 27 мая 2020 г. пакетом REPEX (v0.3.0)

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