Como criar tabela de distribuição de frequências usando o R?

linguage R
Estatística
Ciência de Dados
Exploração e visualização de dados
Autor

Gilberto Pereira Sassi

Data de Publicação

1 de outubro de 2023

Neste artigo, eu vou mostrar como usar a linguagem R para criar tabelas de distribuição de frequências para variáveis categóricas, variáveis discretas e variáveis contínuas. A primeira coisa que um analista pode fazer é contar! A contagem ou frequência, como falamos em Estatística e Ciência de Dados, permite que você detecte valores que são comuns e valores pouco usuais e também permite que você encontre diversas características da variável. Além disso, você pode usar tabelas de distribuição de frequências para comunicar informações e construir relatórios e artigos.

Para simplificar a sua vida, assim espero, eu dividi este texto em três partes: tabelas de distribuição de frequências para variáveis categóricas; tabelas de distribuição de frequências para variáveis discretas; e tabelas de distribuição de frequências para variáveis contínuas. E, para ilustrar tudo que eu estiver falando, eu vou usar um conjunto de dados do livro Estatística Básica: empresa.xlsx que é um conjunto de dados com informações socioeconômicas de 36 funcionários de um departamento de contabilidade.

No que segue, vamos usar o framework tidyverse e o pacote janitor.

Tabelas de distribuição de frequências para variáveis categóricas

Suponha que você tenha uma variável categórica \(X\) com suporte \(\{A_1,\dots, A_k\}\), então a ideia é contar quantas vezes \(A_1\) aparece, \(A_2\) aparece e assim por diante. Além disso, você pode calcular a porcentagem de vezes que \(A_1\) aparece, a porcentagem \(A_2\) de vezes que aparece e assim sucessivamente.

Para ilustrar, considere a variável escolaridade onde o pesquisador armazenou o grau de escolaridade de cada um dos 36 funcionários. A primeira coisa que você precisa fazer é carregar os pacotes e os dados.

library(readxl)
library(janitor)
library(tidyverse)
Warning: pacote 'ggplot2' foi compilado no R versão 4.5.1
# carregando o arquivo
df_dados <- read_xlsx("empresa.xlsx")

# uma olhadinha rápida nos dados carregados
glimpse(df_dados) 
Rows: 36
Columns: 6
$ estado_civil  <chr> "solteiro", "casado", "casado", "solteiro", "solteiro", …
$ escolaridade  <chr> "ensino fundamental", "ensino fundamental", "ensino fund…
$ numero_filhos <dbl> 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 1, 2, 0,…
$ salario       <dbl> 4.00, 4.56, 5.25, 5.73, 6.26, 6.66, 6.86, 7.39, 7.59, 7.…
$ idade         <dbl> 26, 32, 36, 20, 40, 28, 41, 43, 34, 23, 33, 27, 37, 44, …
$ procedencia   <chr> "interior", "capital", "capital", "outra", "outra", "int…

Se tudo estiver correto, já estamos prontos para construir a tabela de distribuição de frequência, ou seja, contar quantos funcionários têm ensino fundamental, quantos funcionários têm ensino médio e quantos funcionários têm superior.

Primeiro usamos a função tabyl do pacote janitor para contar sem incluir o total e sem o sinal de porcentagem na coluna de porcentagem. Depois usamos adorn_totals e adorn_pct_formatting para adicionar o total na tabela e o sinal de porcentagem, respectivamente. Finalmente, usamos a função rename do pacote dplyr para traduzir os nomes da tabela para o português. Repare que usamos o operador pipe |> para simplificar a nossa codificação.

tabyl(df_dados, escolaridade) |> # função que realiza a contagem
 adorn_totals() |> # adiciona a linha de total a tabela
 adorn_pct_formatting(digits = 2, affix_sign = FALSE) |> # acrescenta porcentagem na tabela sem o sinal de %
 rename("Frequência" = n, "Porcentagem" = percent) # nomes em português
       escolaridade Frequência Porcentagem
 ensino fundamental         12       33.33
       ensino médio         18       50.00
           superior          6       16.67
              Total         36      100.00

Tabelas de distribuição de frequências para variáveis discretas

Para uma variável discreta, usamos uma abordagem semelhante a abordagem usada para variáveis categóricas. Suponha que \(X\) seja uma variável discreta com suporte \(\{x_1, \dots, x_k\}\). Então, vamos contar quantas vezes o valor \(x_1\) apareceu no conjunto de dados, quantas vezes apareceu o valor \(x_2\) e assim por diante. Além disso, também vamos calcular a porcentagem de vezes que o valor \(x_1\) ocorreu no conjunto de dados, a porcentagem de vezes que o valor \(x_2\) e assim por diante.

tabyl(df_dados, numero_filhos) |>
  adorn_totals() |>
  adorn_pct_formatting(digits = 2, affix_sign = FALSE) |>
  rename("Número de filhos" = numero_filhos, "Frequência" = n, "Porcentagem" = percent)
 Número de filhos Frequência Porcentagem
                0         20       55.56
                1          5       13.89
                2          7       19.44
                3          3        8.33
                5          1        2.78
            Total         36      100.00

Tabelas de distribuição de frequências para variáveis contínuas

E se quisermos construir uma tabela de distribuição de frequências para uma variável contínua? No conjunto de dados empresa.xlsx, a variável salario é contínua e se você olhar no arquivo empresa.xlsx você pode reparar que nenhum funcionário tem salário igual ao outro. Consequentemente, se usarmos a técnica que vimos nas seções anteriores, teremos uma tabela com 36 valores, que é basicamente uma cópia dos dados originais, e ficaria bem complicado de encontrar características desta variável.

Neste caso, agregamos os valores em intervalos. Os intervalos podem ser determinados de diversas formas. O regulador ou o mercado pode especificar intervalos para uma variável, por exemplo os intervalos usados na medição de pressão arterial podem ser especificados pelo governo. Estudos ou pesquisas anteriores podem indicar quais intervalos você deveria usar em tabela de distribuição de frequências.

E se você não tem acesso a estudos anteriores, nem regulador, nem mercado para indicar como construir os intervalos? Neste caso, você pode categorizar a variável contínua em \(k\) intervalos de mesmo tamanho segundo a Regra de Sturge, que é dada por \[ k = \lfloor 1 + \log2(n) \rfloor, \] onde \(n\) é o número de linhas (ou o tamanho da amostra) do conjunto de dados, e \(\lfloor x \rfloor\) é o maior número inteiro menor ou igual a \(x\) (equivale a função arrendonda.para.baixo do google sheets).

Em nosso exemplo, não temos regulador, nem mercado e nem estudos anteriores para nos indicar os intervalos para usar com a variável salario do conjuto de dados empresa.xlsx. Então, vamos usar a Regra de Sturge, ou seja, vamos categorizar a variável salario agregando os valores de salario em \(k=\lfloor 1 + \log2(36) \rfloor=6\) intervalos de mesmo tamanho usando a função cut.

# limites dos intervalos
breaks <- with(df_dados, seq(from = min(salario), to = max(salario), length.out = 6))

# categorizando salario em 6 intervalos
df_dados <- mutate(df_dados, salario_cat = cut(salario, breaks, include.lowest = T, right = F))

Após categorização, podemos usar as técnicas que aprendamos para variáveis categóricas.

tabyl(df_dados, salario_cat) |>
  adorn_totals() |>
  adorn_pct_formatting(digits = 2, affix_sign = FALSE) |>
  rename("Salário" = salario_cat, "Frequência" = n, "Porcentagem" = percent)
     Salário Frequência Porcentagem
    [4,7.86)         10       27.78
 [7.86,11.7)         12       33.33
 [11.7,15.6)          7       19.44
 [15.6,19.4)          6       16.67
 [19.4,23.3]          1        2.78
       Total         36      100.00

© 2025 Ciência de Dados