Tabela de Distribuição de Frequência

Olá.

Quais são as boas opções alternativas ao R Base para se construir Tabelas de Distribuição de Frequência? Há algum pacote que faça isso?

A seguir tem algumas possibilidades, mas creio que existem outras que eu não conheça. obs: a versão com o pacote qdap obteve valores diferentes pois ele remove os NAs.

library(magrittr, include.only = "%>%")
df <- dplyr::starwars

# com o pacote qdap
# install.packages("qdap")
qdap::dist_tab(df$sex) %>%
  knitr::kable()
interval freq cum.freq percent cum.percent
female 16 16 19.28 19.28
hermaphroditic 1 17 1.20 20.48
male 60 77 72.29 92.77
none 6 83 7.23 100.00

# com janitor
library(janitor)
#> 
#> Attaching package: 'janitor'
#> The following objects are masked from 'package:stats':
#> 
#>     chisq.test, fisher.test
df %>%
  janitor::tabyl(sex) %>%
  janitor::adorn_pct_formatting() %>%
  dplyr::arrange(desc(n)) %>%
  knitr::kable()
sex n percent valid_percent
male 60 69.0% 72.3%
female 16 18.4% 19.3%
none 6 6.9% 7.2%
NA 4 4.6% -
hermaphroditic 1 1.1% 1.2%

# com dplyr - precisamos montar a tabela :)
df %>%
  dplyr::count(sex, sort = TRUE) %>%
  dplyr::mutate(porc = n / sum(n) * 100) %>%
  knitr::kable(digits = 2, col.names = c("Categoria", "Frequência absoluta", "Frequência relativa (%)"))
Categoria Frequência absoluta Frequência relativa (%)
male 60 68.97
female 16 18.39
none 6 6.90
NA 4 4.60
hermaphroditic 1 1.15

Created on 2021-05-18 by the reprex package (v2.0.0)

4 curtidas

Bea, o caminho que sei para dados em classe é esse:

Tabela de distribuição de frequência

df <- c(31,13,12,22,27,33,17,26,16,22,18,13,16,23,20,18,22,15,26,12, 20,21,23,27,30)

intervalos <- seq(10,35,5)

classes<-c("10-14","15-19","20-24","25-29","30-35")

tabela <- table(cut(df, breaks=intervalos, right=FALSE, labels=classes))

tabela

Vc conhece outra forma de criar tabelas de variáveis continuas em intervalos de classe?

Oi!
Quando eu preciso fazer isso também uso a função cut(), porém usando mutate mesmo.

library(magrittr, include.only = "%>%")
# cria base de exemplo
df <- tibble::tibble(idade = c(31,13,12,22,27,33,17,26,16,22,18,13,16,23,20,18,22,15,26,12, 20,21,23,27,30))

df %>%
  dplyr::mutate(idade_quebras = cut(idade,breaks = seq(0,120,5)),
                # as próximas linhas servem para arrumar a formatação das labels
                # de forma mais geral, se mais idades forem adicionadas na base
                # continuará funcionando bem :)
                idade_quebras = as.character(idade_quebras),
                idade_quebras = stringr::str_remove_all(idade_quebras, "\\(|\\]"),
                idade_quebras = stringr::str_replace_all(idade_quebras,  ",", "-")) %>%
  # daqui em diante é apenas a tabela de frequência com o janitor
  janitor::tabyl(idade_quebras) %>%
  janitor::adorn_pct_formatting() %>%
  dplyr::arrange(desc(n)) %>%
  knitr::kable()
idade_quebras n percent
15-20 7 28.0%
20-25 6 24.0%
10-15 5 20.0%
25-30 5 20.0%
30-35 2 8.0%

Created on 2021-05-19 by the reprex package (v2.0.0.9000)

2 curtidas