Unir as bases
# Defina o diretório onde estão os arquivos DBC e o código da doença desejada
pasta_sinan <- "D:/bd_dbc/DBC_SINAN/"
cod_doenca <- "BOTU" # Exemplo: "DENG", "HEPA", "CHIK"
anos <- 14:23 # Anos que serão lidos (2014 a 2023)
lista_sinan <- list() # Criação da lista para armazenar os dataframes lidos
# Loop para leitura dinâmica dos arquivos .dbc
for (ano in anos) {
arquivo <- paste0(pasta_sinan, cod_doenca, "BR", ano, ".dbc") # Montagem do caminho completo do arquivo DBC
if (file.exists(arquivo)) { # Verifica se o arquivo existe antes de tentar ler
tryCatch({ # Lê o arquivo .dbc e armazena na lista com um nome baseado no ano
lista_sinan[[paste0(tolower(cod_doenca), ano, "br")]] <- read.dbc::read.dbc(arquivo)
message(paste0("✔︎ Arquivo '", basename(arquivo), "' lido com sucesso."))
}, error = function(e) {
message("✗ Erro ao ler o arquivo: ", basename(arquivo), " - ", e$message) # Em caso de erro de leitura, exibe mensagem
})
} else {
message("✗ Arquivo não encontrado: ", basename(arquivo)) # Caso o arquivo não exista, exibe mensagem de aviso
}
}
# Exibe os nomes dos dataframes carregados
message("\nNomes dos dataframes carregados na lista 'lista_sinan':") # Para checar se todos os bancos foram incluídos corretamente
print(names(lista_sinan))
# Se nenhum arquivo foi carregado, interrompe a execução com erro
if (length(lista_sinan) == 0) {
stop("Nenhum arquivo DBC foi lido com sucesso. Verifique o caminho, nomes dos arquivos e o código da doença.")
}
# Coleta todas as colunas existentes nos dataframes lidos
todas_colunas <- unique(unlist(lapply(lista_sinan, colnames)))
# Função para padronizar colunas em todos os dataframes
padronizar_colunas <- function(df, todas_colunas) {
colunas_faltantes <- setdiff(todas_colunas, colnames(df))
df[colunas_faltantes] <- NA # Adiciona colunas faltantes com NA
return(df[todas_colunas]) # Reordena as colunas na ordem padrão
}
# Padroniza colunas em todos os dataframes
message("\nPadronizando colunas dos dataframes para garantir compatibilidade...")
lista_sinan <- lapply(lista_sinan, padronizar_colunas, todas_colunas = todas_colunas)
message("✔︎ Colunas padronizadas para todos os dataframes.")
# Verifica se ainda há diferenças nas colunas após a padronização
message("\nVerificando diferenças nas colunas após padronização (deve ser vazia se tudo ok):")
diferencas_colunas <- lapply(lista_sinan, function(df) {
setdiff(todas_colunas, colnames(df))
})
print(diferencas_colunas)
# Combina todos os dataframes em um único dataframe
message("\nCombinando dataframes em um único dataframe unificado...")
sinan_final_df <- do.call(rbind, lista_sinan)
message("✔︎ Dataframes combinados com sucesso.")
# Remove colunas que estão totalmente vazias (só NA)
message("Removendo colunas totalmente vazias do dataframe unificado...")
sinan_final_df <- sinan_final_df[, colSums(!is.na(sinan_final_df)) > 0]
message("✔︎ Colunas vazias removidas.")
# Exibe os nomes das colunas do dataframe final
message("\nNomes das colunas no dataframe final 'sinan_final_df':")
print(colnames(sinan_final_df))
# Define o caminho do arquivo Feather de saída
caminho_saida_feather <- paste0(
"D:/bd_feather/",
tolower(cod_doenca),
min(anos), "br", max(anos),
".feather"
)
# Salva o dataframe no formato Feather
message(paste0("\nSalvando dataframe combinado em formato Feather em '", caminho_saida_feather, "'..."))
write_feather(sinan_final_df, caminho_saida_feather, compression = "zstd")
message(paste0("✔︎ Arquivo '", basename(caminho_saida_feather), "' salvo com sucesso."))
# Verifica se o arquivo Feather foi salvo corretamente, tentando reabrir
message(paste0("\nVerificando o arquivo Feather recém-salvo: Carregando '", basename(caminho_saida_feather), "' para teste..."))
sinan_verificacao <- read_feather(caminho_saida_feather)
message(paste0("✔︎ Base '", basename(caminho_saida_feather), "' carregada para verificação."))
message(paste0("Dimensões da base carregada: ", nrow(sinan_verificacao), " linhas, ", ncol(sinan_verificacao), " colunas."))HealthieR Scripts: Automatizando análises em Epidemiologia e Saúde Pública com R