Группировать данные по интервалам и условиям - PullRequest
1 голос
/ 10 марта 2020

У меня есть следующая проблема: я хочу иметь возможность добавлять доход (случайный 1-100) в интервалы и группировать их по полу (показывая, сколько случаев в каждом интервале для каждого пола), плюс я хочу знать пропорции и проценты:

ingresos <- sample (0:100, 30, replace = T)
sexo <- sample (1:2, 30, replace = T)


base<-tibble(Ingresos=ingresos<-case_when(
    ingresos>=0 & ingresos<20 ~ "(0, 19]",
    ingresos>=20 & ingresos<50 ~ "(20, 49]",
    ingresos>=50 & ingresos<70 ~ "(50, 69]",
    ingresos>=70 ~ "(70 ó +)"
  ) , Sexo=sexo, Proporción=ingresos/sum(ingresos), Porcentaje=Proporción*100)

Я закончил с:

> show(base)
# A tibble: 30 x 4
   Ingresos  Sexo Proporción Porcentaje
   <chr>    <int>      <dbl>      <dbl>
 1 (0, 19]      2    0.00583      0.583
 2 (50, 69]     1    0.0343       3.43 
 3 (20, 49]     2    0.0233       2.33 
 4 (20, 49]     1    0.0188       1.88 
 5 (20, 49]     2    0.0311       3.11 
 6 (50, 69]     2    0.0369       3.69 
 7 (20, 49]     1    0.0278       2.78 
 8 (20, 49]     1    0.0142       1.42 
 9 (70 ó +)     1    0.0628       6.28 
10 (20, 49]     1    0.0130       1.30 
# … with 20 more rows

И я ищу что-то вроде:

Ingresos Sexo Cases Proporción Porcentaje
(0,19]     1    12     .xxx       x.xxx
(0,19]     2    20     .xxx       x.xxx
(20,49]    1    17     .xxx       x.xxx
(20,49]    2    30     .xxx       x.xxx

1 Ответ

0 голосов
/ 10 марта 2020

Разделение вектора ingresos на диапазоны можно выполнить с помощью cut(). И частоты могут быть получены с dplyr::count(). Пропорции и проценты могут быть добавлены с dplyr::mutate(). Как это:

ingresos <- sample(0:100, 30, replace = T)
sexo <- sample(1:2, 30, replace = T)

library(dplyr)

tibble(ingresos, sexo) %>% 
  mutate(ingresos = cut(ingresos, c(0, 20, 50, 70, 100))) %>% 
  count(ingresos, sexo) %>% 
  mutate(Proporción=n/sum(n), Porcentaje=Proporción*100)
#> # A tibble: 8 x 5
#>   ingresos  sexo     n Proporción Porcentaje
#>   <fct>    <int> <int>      <dbl>      <dbl>
#> 1 (0,20]       1     3     0.1         10   
#> 2 (0,20]       2     4     0.133       13.3 
#> 3 (20,50]      1     2     0.0667       6.67
#> 4 (20,50]      2     5     0.167       16.7 
#> 5 (50,70]      1     3     0.1         10   
#> 6 (50,70]      2     1     0.0333       3.33
#> 7 (70,100]     1     4     0.133       13.3 
#> 8 (70,100]     2     8     0.267       26.7
...