Faxina de dados - Exercício 2

library(magrittr)
library(ggplot2)

# Exercício 2 -------------------------------------------------------------

path_excel <- "dados/dados_consultoria.xlsx"

# Lê os nomes das abas do excel, no caso 3.
abas <- readxl::excel_sheets(path_excel) 
#> Error: `path` does not exist: 'dados/dados_consultoria.xlsx'

# Função que lê uma aba.
le_uma_aba <- function(aba) {
  readxl::read_excel(path_excel, sheet = aba, skip = 1) %>%
    dplyr::mutate(cidade = aba)
}

# Por exemplo...
le_uma_aba("Osasco")
#> Error: `path` does not exist: 'dados/dados_consultoria.xlsx'
le_uma_aba("Ourinhos")
#> Error: `path` does not exist: 'dados/dados_consultoria.xlsx'
le_uma_aba("Campos do Jordão")
#> Error: `path` does not exist: 'dados/dados_consultoria.xlsx'

# Usando o purrr, pode ler todas as abas
indicadores <- purrr::map_dfr(abas, le_uma_aba)
#> Error in map(.x, .f, ...): object 'abas' not found

# Essa é boa.
# Dizendo à função readr que no meu locale vírgula é marcação de decimal.
loc <- readr::locale(decimal_mark = ",")

# Tidyando.
indicadores_limpo <- indicadores %>%
  # limpa nomes das colunas
  janitor::clean_names() %>%
  dplyr::mutate(
    # porcentagem de texto para número
    dplyr::across(
      dplyr::starts_with("percent_"),
      readr::parse_number, locale = loc
    ) / 100,
    # ano mes para data
    data = lubridate::ymd(paste0(ano, mes, "01", sep = "-")),
    # id para texto
    id = as.character(id)
  ) %>%
  # retira "percent", numeros e underlines dos nomes
  dplyr::rename_with(~stringr::str_remove_all(., "percent|[0-9_]"))
#> Error in janitor::clean_names(.): object 'indicadores' not found

# Exercício 2 - Sobre os IDs, o cliente informou que deveria ter apenas uma
# linha para cada trinca (id-ano-mes).

# Por conta de uma inconsistência, poderia acontecer de virem duas ou mais
# linhas para o mesma trinca (id-ano-mes).

# O correto é ter apenas uma linha apenas. Eles disseram que a linha com o
# maior valor de agendamento tem mais chance de ser a correta.

# a) retire as duplicatas.

# b) quais combinações de id-ano-mês nós temos?


# Resolução. --------------------------------------------------------------

# No objeto dupes, nas linhas 7 a 10 e 22 e 23, todos agendamentos valem 0, mas 
# as outras colunas têm valores diferentes. Como resolvo isso? Qual delas escolho?
# Há alguma função para fazer isso?

dupes <- indicadores_limpo %>% 
  dplyr::mutate(mes = str_to_title(mes)) %>% # Uniformizando o nome dos meses.
  janitor::get_dupes(id, ano, mes)
#> Error in dplyr::mutate(., mes = str_to_title(mes)): object 'indicadores_limpo' not found

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

Oi Mário, você colou o código mas não escreveu a dúvida.

Vi que o código apresenta um erro de caminhos. O R não está encontrando o arquivo dados_consultoria.xlsx na pasta dados do seu projeto.

Você precisa corrigir os caminhos no seu código para prosseguir.

Recomendo a leitura deste post: