Tidyverse: преобразование числовых данных в категориальные данные для построения графиков с неравномерной шириной ячейки - PullRequest
1 голос
/ 03 июня 2019

Используя тидиверс, я собираюсь дискретизировать числовые данные с целью использования гистограммы для построения различных числовых диапазонов, как если бы данные были категоричными, путем ручного объявления места, где происходят сокращения, например, для возрастных групп илидиапазоны доходов.Я хочу иметь интервалы неравной ширины.

До сих пор я пробовал подход base R, используя cut() и устанавливая ячейки с помощью breaks = c().Однако я замечаю, что в пакете ggplot2 существует набор функций cut_interval, cut_width и cut_number.Я полагаю, что есть способ вручную установить интервальные сокращения, используя эти функции, потому что для варианта с интервалом и числом существует аргумент breaks.

library(tidyverse)

mtcars <- as_tibble(mtcars)

mtcars %>% 
  count(cut_interval(mpg, n = 4))
#> # A tibble: 4 x 2
#>   `cut_interval(mpg, n = 4)`     n
#>   <fct>                      <int>
#> 1 [10.4,16.3]                   10
#> 2 (16.3,22.1]                   13
#> 3 (22.1,28]                      5
#> 4 (28,33.9]                      4

mtcars %>% 
  count(cut_interval(mpg, n = 4, breaks = c(10, 18, 23, 28, 35)))
#> Error: Evaluation error: lengths of 'breaks' and 'labels' differ.

Создано в 2019-06-03 Представить пакет (v0.2.1)

Вышесказанное близко к тому, что я хочу, но оно устанавливает разрывы на основе количества интервалов.

В приведенном выше примере я хотел бы, чтобы мои группы были точно такими:

10-18, 19-23, 24-28, 29-35.

Возможно ли это с помощью breaks аргумент?Спасибо.

1 Ответ

3 голосов
/ 03 июня 2019

Вы можете просто использовать фактическую базовую функцию cut, чтобы сделать это:

library(tidyverse)

mtcars %>% 
    mutate(bin = cut(mpg, breaks = c(Inf, 10, 18, 19, 23, 24, 28, 29,35))) %>% 
    count(bin)

Что даст вам:

# A tibble: 5 x 2
  bin         n
  <fct>   <int>
1 (10,18]    13
2 (18,19]     2
3 (19,23]    10
4 (24,28]     3
5 (29,35]     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...