Skip to content

Pipeline de Tratamento de Dados em R com dplyr: Dos Dados Brutos a Tabelas Limpas

Problema

Analistas perdem tempo escrevendo loops R repetitivos para limpar conjuntos de dados. O resultado são scripts frágeis, colunas inconsistentes e iterações lentas sempre que chega um novo arquivo.

Agitação

Etapas manuais se acumulam: selecionar as colunas erradas, aplicar transformações na ordem incorreta ou esquecer de tratar factors versus characters. Cada erro obriga a reprocessar tudo e aumenta o risco de enviar métricas incorretas para dashboards a jusante.

Solução

Adote um pipeline consistente com dplyr que espelha a lógica de SQL e mantém cada transformação legível. Os verbos abaixo cobrem seleção de colunas, filtragem de linhas, criação de novas variáveis, agregações, ordenação e joins seguros para que os dados estejam organizados antes da modelagem ou visualização.

Pipeline básico em ação

library(dplyr)
 
clean_sales <- raw_sales %>%
  mutate(
    region = as.character(region),        # avoid accidental factor levels
    revenue = price * quantity
  ) %>%
  filter(!is.na(revenue), revenue > 0) %>%
  select(order_id, region, revenue, channel, order_date) %>%
  arrange(desc(revenue)) %>%
  group_by(region, channel) %>%
  summarise(
    orders = n(),
    revenue = sum(revenue),
    avg_order = mean(revenue),
    .groups = "drop"
  )

Verbos dplyr e equivalentes em SQL

dplyr verbFinalidadeAnalogia em SQLObservação rápida
select()manter ou renomear colunasSELECT col1, col2Use everything() para reordenar rapidamente.
filter()subconjunto de linhasWHERE conditionCombine com %in% para múltiplos valores.
mutate()adicionar/transformar colunasSELECT col1, col2*2 AS col2xPrefira if_else() para lógica com tipos estáveis.
summarise() + group_by()métricas agrupadasGROUP BY ...Adicione .groups = "drop" para remover o agrupamento.
arrange()ordenar linhasORDER BYUse desc() para ordem decrescente.
left_join()enriquecer com tabelas de lookupLEFT JOINMantenha as chaves de join com o mesmo tipo (character vs factor).
bind_rows() / bind_cols()empilhar ou alargar tabelasUNION ALL / concatenação de colunasGaranta esquemas compatíveis ao empilhar.

Visão rápida: joins vs. binds

# Join: adicionar colunas de uma tabela de lookup
sales_with_regions <- sales %>%
  left_join(region_lookup, by = "region_id")
 
# Bind: empilhar schemas idênticos
all_sales <- bind_rows(sales_2023, sales_2024)

Evite armadilhas com factors e codificação

  • Converta identificadores para character antes de joins para evitar níveis incompatíveis.
  • Use mutate(across(where(is.factor), as.character)) se um CSV foi lido com factors implícitos.
  • Padronize textos com stringr::str_trim e tolower antes de agrupar para evitar categorias duplicadas.

Template rápido de partida

prep_data <- function(df) {
  df %>%
    mutate(across(where(is.factor), as.character)) %>%
    filter(!is.na(key_id)) %>%
    distinct() %>%
    select(key_id, everything())
}

Checklist antes de salvar

  • Colunas estão explicitamente selecionadas e ordenadas.
  • Joins principais usam tipos compatíveis e sufixos claros quando necessário (suffix = c(".src", ".lkp")).
  • Resumos removem o agrupamento para evitar surpresas em etapas posteriores.
  • Saídas contêm apenas colunas limpas, legíveis, prontas para gráficos ou modelos.

Guias relacionados