Integração de Bases DBC
O script apresentado tem como objetivo principal carregar, padronizar e consolidar arquivos de dados DBC (formato utilizado pelo DATASUS) referentes a diferentes anos, facilitando análises epidemiológicas longitudinais. A seguir, detalho cada etapa do código:
1. Definição do Caminho dos Arquivos
pasta_botu: Define o diretório onde os arquivos DBC estão armazenados no computador.- Exemplo:
"C:/Users/wkoli/Downloads/arquivo/"
- Exemplo:
2. Seleção dos Anos de Interesse
anos <- 15:24: Cria um vetor com os anos de interesse (2015 a 2024, considerando o padrão de dois dígitos).
3. Inicialização da Lista de Dataframes
botu_15br24 <- list(): Cria uma lista vazia para armazenar os dataframes de cada ano.
4. Leitura Dinâmica dos Arquivos DBC
Loop
for: Para cada ano, monta o nome do arquivo (BOTUBR15.dbc,BOTUBR16.dbc, etc.) e verifica se o arquivo existe.Leitura com
read.dbc: Se o arquivo existir, lê o conteúdo e armazena na lista, nomeando cada elemento conforme o ano.Tratamento de Erros: Se houver erro na leitura, exibe mensagem informando o problema.
Mensagem de Arquivo Ausente: Caso o arquivo não exista, informa ao usuário.
5. Verificação dos Dataframes Carregados
names(botu_15br24): Exibe os nomes dos dataframes carregados, permitindo checar quais anos foram lidos com sucesso.
6. Padronização das Colunas
Identificação de Colunas Únicas:
todas_colunas <- unique(unlist(lapply(botu_15br24, colnames)))Gera uma lista com todas as colunas presentes em todos os dataframes, garantindo que a estrutura final seja uniforme.
Função
padronizar_colunas:Adiciona colunas ausentes em cada dataframe, preenchendo com
NA.Reordena as colunas para manter a mesma ordem em todos os dataframes.
Aplicação da Padronização:
lapply(botu_15br24, padronizar_colunas, todas_colunas = todas_colunas)Garante que todos os dataframes tenham as mesmas colunas, mesmo que originalmente não existissem em alguns anos.
7. Verificação de Diferenças nas Colunas
diferencas_colunas: Checa se ainda há diferenças de colunas após a padronização, o que pode indicar problemas na estrutura dos dados.
8. Consolidação dos Dataframes
do.call(rbind, botu_15br24): Junta todos os dataframes padronizados em um único dataframe, empilhando as linhas.
9. Limpeza de Colunas Vazias
Remoção de Colunas com Apenas NA:
botu15br24 <- botu15br24[, colSums(!is.na(botu15br24)) > 0]Elimina colunas que ficaram totalmente vazias após a consolidação.
10. Backup de Segurança
write_feather: Salva o dataframe consolidado em formato Feather, que é eficiente para leitura e escrita, além de suportar compressão (zstd).
Resumo das Boas Práticas
Automatização: O loop e a padronização facilitam a integração de múltiplos anos, mesmo com diferenças estruturais.
Tratamento de Erros: Mensagens informativas ajudam no diagnóstico de problemas.
Padronização: Garante que análises futuras possam ser feitas sem preocupações com inconsistências de colunas.
Backup: Salvar o resultado em formato eficiente e comprimido protege o trabalho realizado.
Esse fluxo é fundamental para análises epidemiológicas robustas, especialmente quando se trabalha com séries históricas e dados provenientes de diferentes períodos, que frequentemente apresentam variações na estrutura dos arquivos.
# PROJETO HealthieR Scripts----------------------------------------
# Integração das Bases de Dados de Botulismo
# Elaboração: Wanderson Epidemiologista
# Data: 5 de julho de 2025
# ******************************************************************
## Etapa 1 - Carregar ------------------------------------------------------
# Criar uma pasta vazia e indicar o caminho onde você salvou os DBC no PC
pasta_botu <- "C:/Users/Downloads/arquivo/"#local onde estão as bases de dados.
# Listar anos dos arquivos DBC disponíveis e de interesse
anos <- 15:24
# Inicializar lista para armazenar dataframes
botu_15br24 <- list()
# Loop para leitura dinâmica dos arquivos DBC
for (ano in anos) {
arquivo <- paste0(pasta_botu, "BOTUBR", ano, ".dbc") # Nome do arquivo
if (file.exists(arquivo)) {
tryCatch({
botu_15br24[[paste0("botu", ano, "br")]] <- read.dbc(arquivo)
}, error = function(e) {
message("Erro ao ler o arquivo: ", arquivo, " - ", e$message)
})
} else {
message("Arquivo não encontrado: ", arquivo)
}
}
# Verificar nomes dos dataframes carregados
names(botu_15br24)
# Padronizar colunas (removida redundância)
# Identifica todas as colunas únicas presentes em todos os dataframes.
todas_colunas <- unique(unlist(lapply(botu_15br24, colnames)))
# Função para adicionar colunas ausentes com NA
padronizar_colunas <- function(df, todas_colunas) {
colunas_faltantes <- setdiff(todas_colunas, colnames(df))
df[colunas_faltantes] <- NA
return(df[todas_colunas])
}
# Aplicar a função de padronização a todos os dataframes
botu_15br24 <- lapply(botu_15br24, padronizar_colunas, todas_colunas = todas_colunas)
# Verificar se há diferenças nas colunas após padronização
diferencas_colunas <- lapply(botu_15br24, function(df) {
setdiff(todas_colunas, colnames(df))
})
diferencas_colunas # Exibir resultados
# Combinar dataframes em um único dataframe
botu15br24 <- do.call(rbind, botu_15br24)
# Remover colunas com todos os valores NA
botu15br24 <- botu15br24[, colSums(!is.na(botu15br24)) > 0]
#### 1º backup de segurança --------------------------------------------------
write_feather(botu15br24, "botu15br24.feather", compression = "zstd")HealthieR Scripts: Automatizando análises em Epidemiologia e Saúde Pública com R