For com summarize e group_by

Oi pessoal!

Essa duvida foi enviada:

Olá ! Gostaria de fazer uma análise descritiva de todas as variáveis categóricas através de um for, mas não está rodando. É possível? Veja:

for (i in 2:4) {
      desc[i] <- bd_ori %>%
        group_by(comprou,bd_ori[i]) %>%
        summarise(count_n = n())
    }

    for (i in 2:4) {
      desc[i] <- bd_ori %>%
        group_by(comprou,colnames(bd_ori[i])) %>%
        summarise(count_n = n())
    }

Segue uma forma de resolver - criar uma funcao e usar ela. Voce pode adaptar com os seus dados, e adicionar outras funcoes desejadas no summarise :slight_smile:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
# install.packages("dados")
library(dados)

resumir <- function(var, df = dados_starwars) {
  df |>
    group_by(.data[[var]]) |>
    summarise(quantidade = n())
}

# exemplo de uso da funcao
resumir("nome") 
#> # A tibble: 87 × 2
#>    nome                quantidade
#>    <chr>                    <int>
#>  1 Ackbar                       1
#>  2 Adi Gallia                   1
#>  3 Anakin Skywalker             1
#>  4 Arvel Crynyd                 1
#>  5 Ayla Secura                  1
#>  6 Bail Prestor Organa          1
#>  7 Barriss Offee                1
#>  8 BB8                          1
#>  9 Ben Quadinaros               1
#> 10 Beru Whitesun lars           1
#> # … with 77 more rows

# fazendo para todas as vars
purrr::map(names(dados_starwars), resumir)
#> [[1]]
#> # A tibble: 87 × 2
#>    nome                quantidade
#>    <chr>                    <int>
#>  1 Ackbar                       1
#>  2 Adi Gallia                   1
#>  3 Anakin Skywalker             1
#>  4 Arvel Crynyd                 1
#>  5 Ayla Secura                  1
#>  6 Bail Prestor Organa          1
#>  7 Barriss Offee                1
#>  8 BB8                          1
#>  9 Ben Quadinaros               1
#> 10 Beru Whitesun lars           1
#> # … with 77 more rows
#> 
#> [[2]]
#> # A tibble: 46 × 2
#>    altura quantidade
#>     <int>      <int>
#>  1     66          1
#>  2     79          1
#>  3     88          1
#>  4     94          1
#>  5     96          2
#>  6     97          1
#>  7    112          1
#>  8    122          1
#>  9    137          1
#> 10    150          2
#> # … with 36 more rows
#> 
#> [[3]]
#> # A tibble: 39 × 2
#>    massa quantidade
#>    <dbl>      <int>
#>  1    15          1
#>  2    17          1
#>  3    20          1
#>  4    32          2
#>  5    40          1
#>  6    45          2
#>  7    48          2
#>  8    49          1
#>  9    50          2
#> 10    55          2
#> # … with 29 more rows
#> 
#> [[4]]
#> # A tibble: 12 × 2
#>    cor_do_cabelo        quantidade
#>    <chr>                     <int>
#>  1 Branco                        4
#>  2 Castanho                     18
#>  3 Castanho avermelhado          1
#>  4 Castanho, Cinza               1
#>  5 Cinza                         1
#>  6 Desconhecido                  1
#>  7 Loiro                         4
#>  8 Nenhum                       37
#>  9 Preto                        13
#> 10 Ruivo, Branco                 1
#> 11 Ruivo, Cinza                  1
#> 12 <NA>                          5
#> 
#> [[5]]
#> # A tibble: 31 × 2
#>    cor_da_pele                    quantidade
#>    <chr>                               <int>
#>  1 "Amarela"                               2
#>  2 "Azul"                                  2
#>  3 "Azul, Cinza"                           2
#>  4 "B\"ranca p\\u00e1lida"                 5
#>  5 "Branca"                                2
#>  6 "Branca clara"                         17
#>  7 "Branca clara, Verde, Amarela"          1
#>  8 "Branca, Azul"                          2
#>  9 "Branca, Vermelha"                      1
#> 10 "Bronzeada"                             2
#> # … with 21 more rows
#> 
#> [[6]]
#> # A tibble: 14 × 2
#>    cor_dos_olhos       quantidade
#>    <chr>                    <int>
#>  1 Amarelo                     11
#>  2 Azul                        19
#>  3 Azul acinzentado             1
#>  4 Branco                       1
#>  5 Castanho                    21
#>  6 Castanho esverdeado          3
#>  7 Desconhecido                 3
#>  8 Laranja                      8
#>  9 Ouro                         1
#> 10 Preto                       11
#> 11 Rosa                         1
#> 12 Verde, Amarelo               1
#> 13 Vermelho                     5
#> 14 Vermelho, Azul               1
#> 
#> [[7]]
#> # A tibble: 37 × 2
#>    ano_nascimento quantidade
#>             <dbl>      <int>
#>  1            8            1
#>  2           15            1
#>  3           19            2
#>  4           21            1
#>  5           22            1
#>  6           24            1
#>  7           29            1
#>  8           31            1
#>  9           31.5          1
#> 10           33            1
#> # … with 27 more rows
#> 
#> [[8]]
#> # A tibble: 5 × 2
#>   sexo_biologico quantidade
#>   <chr>               <int>
#> 1 Fêmea                  16
#> 2 Hermafrodita            1
#> 3 Macho                  60
#> 4 Nenhum                  6
#> 5 <NA>                    4
#> 
#> [[9]]
#> # A tibble: 3 × 2
#>   genero    quantidade
#>   <chr>          <int>
#> 1 Feminino          17
#> 2 Masculino         66
#> 3 <NA>               4
#> 
#> [[10]]
#> # A tibble: 49 × 2
#>    planeta_natal  quantidade
#>    <chr>               <int>
#>  1 Alderaan                3
#>  2 Aleen Minor             1
#>  3 Bespin                  1
#>  4 Bestine IV              1
#>  5 Cato Neimoidia          1
#>  6 Cerea                   1
#>  7 Champala                1
#>  8 Chandrila               1
#>  9 Concord Dawn            1
#> 10 Corellia                2
#> # … with 39 more rows
#> 
#> [[11]]
#> # A tibble: 38 × 2
#>    especie         quantidade
#>    <chr>                <int>
#>  1 Aleena                   1
#>  2 Besalisk                 1
#>  3 Cerean                   1
#>  4 Chagriano                1
#>  5 Clawdite                 1
#>  6 Droide                   6
#>  7 Dug                      1
#>  8 Espécie do Yoda          1
#>  9 Ewok                     1
#> 10 Geonosiano               1
#> # … with 28 more rows
#> 
#> [[12]]
#> # A tibble: 24 × 2
#>    filmes    quantidade
#>    <list>         <int>
#>  1 <chr [5]>          3
#>  2 <chr [6]>          2
#>  3 <chr [7]>          1
#>  4 <chr [4]>          1
#>  5 <chr [3]>          2
#>  6 <chr [1]>          4
#>  7 <chr [3]>          8
#>  8 <chr [2]>          2
#>  9 <chr [4]>          1
#> 10 <chr [3]>          1
#> # … with 14 more rows
#> 
#> [[13]]
#> # A tibble: 11 × 2
#>    veiculos  quantidade
#>    <list>         <int>
#>  1 <chr [2]>          1
#>  2 <chr [0]>         76
#>  3 <chr [1]>          1
#>  4 <chr [1]>          2
#>  5 <chr [2]>          1
#>  6 <chr [1]>          1
#>  7 <chr [1]>          1
#>  8 <chr [1]>          1
#>  9 <chr [1]>          1
#> 10 <chr [1]>          1
#> 11 <chr [1]>          1
#> 
#> [[14]]
#> # A tibble: 17 × 2
#>    naves_espaciais quantidade
#>    <list>               <int>
#>  1 <chr [2]>                1
#>  2 <chr [0]>               67
#>  3 <chr [1]>                1
#>  4 <chr [1]>                3
#>  5 <chr [5]>                1
#>  6 <chr [3]>                1
#>  7 <chr [2]>                2
#>  8 <chr [1]>                1
#>  9 <chr [1]>                2
#> 10 <chr [1]>                1
#> 11 <chr [1]>                1
#> 12 <chr [1]>                1
#> 13 <chr [1]>                1
#> 14 <chr [1]>                1
#> 15 <chr [1]>                1
#> 16 <chr [1]>                1
#> 17 <chr [3]>                1

Created on 2022-04-20 by the reprex package (v2.0.1)

3 Curtidas