Limpeza de dados no R: janitor

Wlademir Prates

O que você encontra aqui?

Limpeza de dados no R

  • Antes de qualquer análise precisamos fazer a limpeza de dados.
  • O R possui vários pacotes para limpeza e transformação de dados.
  • Isso facilita muito todo o processo e garante a consistência e confiabilidade do estudo.

janitor

Desenvolvido tendo em mente os usuários de R do iniciante ao intermediário, é otimizado para facilidade de uso.

Segue os princípios do “tidyverse” e funciona bem com o %>%.

As principais funções:

  • Formata perfeitamente os nomes das colunas.
  • Fornece contagens rápidas de combinações de variáveis.
  • Isola e apaga registros duplicados.

janitor – clean_names

Ajusta o nome das colunas com problema de formatação, espaços e caracteres inválidos.

Exemplo de colunas com problema:

[1] "caseID"            "DOB"               "Other"            
[4] "Coluna com Espaço"

Utilizando a função:

library(janitor)
clean_names(df)
# A tibble: 1 × 4
  case_id   dob other coluna_com_espaco
    <dbl> <dbl> <dbl>             <dbl>
1       1     2     3                 4

janitor - get_dupes

Apresenta os dados duplicados:

get_dupes(mtcars, mpg, hp)
  mpg  hp dupe_count cyl disp drat    wt  qsec vs am gear carb
1  21 110          2   6  160  3.9 2.620 16.46  0  1    4    4
2  21 110          2   6  160  3.9 2.875 17.02  0  1    4    4

janitor - tabyl

Apresenta contagens rápidas dos dados das tabelas (sendo compatível com o pipe %>% e outros recursos):

mtcars %>%
  tabyl(cyl, gear) # o mesmo que tabyl(mtcars, cyl, gear)
 cyl  3 4 5
   4  1 8 2
   6  2 4 1
   8 12 0 2

janitor - compare_df_cols

Compara as colunas e apresenta os tipos diferentes:

df1 <- tibble(a = 1:2, b = c("pequeno", "grande"))
df1
# A tibble: 2 × 2
      a b      
  <int> <chr>  
1     1 pequeno
2     2 grande 
df2 <- tibble(
  a = 10:12,
  b = as.factor(c("médio", "pequeno", "grande")),
  c = 0
)
df2
# A tibble: 3 × 3
      a b           c
  <int> <fct>   <dbl>
1    10 médio       0
2    11 pequeno     0
3    12 grande      0
df3 <- tibble(a = 3:4, b = c("médio", "grande"))
df3
# A tibble: 2 × 2
      a b     
  <int> <chr> 
1     3 médio 
2     4 grande
compare_df_cols(df1, df2, df3, return = "mismatch", bind_method = "rbind") # tente também "all" e "match"
  column_name       df1     df2       df3
1           b character  factor character
2           c      <NA> numeric      <NA>

janitor - compare_df_cols_same

Executa a mesma comparação que em compare_df_cols, retornando verdadeiro ou falso para a consulta:

df1 <- tibble(a = 1:2, b = c("pequeno", "grande"))
df2 <- tibble(a = 10:12, b = as.factor(c("médio", "pequeno", "grande")), c = 0) # no exemplo, a coluna b é um fator
df3 <- tibble(a = 3:4, b = c("médio", "grande"))

compare_df_cols(df1, df2, df3, return = "mismatch", bind_method = "rbind") # tente também "all" e "match"
  column_name       df1     df2       df3
1           b character  factor character
2           c      <NA> numeric      <NA>

Janitor - compare_df_cols_same

Executa a mesma comparação que em compare_df_cols, retornando verdadeiro ou falso para a consulta:

compare_df_cols_same(df1, df2, df3)
  column_name       ..1    ..2       ..3
1           b character factor character
[1] FALSE

janitor - remove_empty

Remove colunas 100% vazias (NA).

  • Caso de uso: limpeza de arquivos do Excel que contêm linhas e colunas vazias após serem lidos no R.

Tabela com valores em branco:

# A tibble: 3 × 5
     v1 v2    v3    v4       V5
  <dbl> <lgl> <chr> <chr> <dbl>
1     1 NA    a     c        NA
2    NA NA    <NA>  <NA>     NA
3     3 NA    b     <NA>      4

janitor - remove_empty

Exemplo do uso do remove_empty removendo colunas e linhas em branco:

library(janitor)
df %>%
  remove_empty(c("rows", "cols"))
# A tibble: 2 × 4
     v1 v3    v4       V5
  <dbl> <chr> <chr> <dbl>
1     1 a     c        NA
2     3 b     <NA>      4

janitor - remove_constant

Remove colunas contendo dados 100% iguais:

df <- tibble(
  id = c(1, 2, 3, 4),
  country = c("Brazil","Brazil","Brazil", "Brazil"),
  state = c("SP", "SP", "SP", "SP"),
  client_name = c("João", "Maria", "José", "Fernanda"),
  sex = c("M", "F", "M", NA)
  )
df
# A tibble: 4 × 5
     id country state client_name sex  
  <dbl> <chr>   <chr> <chr>       <chr>
1     1 Brazil  SP    João        M    
2     2 Brazil  SP    Maria       F    
3     3 Brazil  SP    José        M    
4     4 Brazil  SP    Fernanda    <NA> 

janitor - remove_constant

Exemplo do uso do remove_constant():

library(janitor)
df %>%
  remove_constant()
# A tibble: 4 × 3
     id client_name sex  
  <dbl> <chr>       <chr>
1     1 João        M    
2     2 Maria       F    
3     3 José        M    
4     4 Fernanda    <NA> 

Leitura complementar

Limpeza de dados no R: janitor