#' @title Gera series de casos ou obitos por faixa_etaria por mes ou dia
#'
#' @description
#'
#' @param dados data.frame ou data.table dos dados de cadastro ou primeiros sintomas da SSP
#' @param var variavel a ser considerada na serie
#' @param tipo caractere que devide se a serie contara por mes ou por dia
#'
#' @return data.frame ou data.table com a serie de casos ou obitos por faixa etaria
#'
#' @import data.table
gera_series_faixa_etaria = function(dados, var, tipo = c("mes", "dia")){
# Conformando ao tipo data.table
dados = transforma_dt(dados)
# Certificando-se que o tipo esta correto
tipo = match.arg(tipo)
# Limita os dados aos obitos caso esta seja a variavel considerada
if (var == "dataobito") {
dados = dados[!is.na(dataobito),]
}
# Transforma idade para inteiro
dados[, idade := as.integer(idade)]
# Cria variavel de faixa etaria
dados[, faixa_etaria := dplyr::case_when(
idade %in% 0:19 ~ "<20",
idade %in% 20:29 ~ "20-29",
idade %in% 30:39 ~ "30-39",
idade %in% 40:49 ~ "40-49",
idade %in% 50:59 ~ "50-59",
idade %in% 60:69 ~ "60-69",
idade %in% 70:79 ~ "70-79",
idade %in% 80:200 ~ ">80",
TRUE ~ "NA"
)]
# Torna faixa_etaria uma fator ordenado
dados[, faixa_etaria := factor(faixa_etaria, ordered = TRUE, levels = c("<20", "20-29", "30-39", "40-49", "50-59", "60-69", "70-79", ">80"))]
# Definindo data
dados[, data := as.Date(get(var))]
# Definindo ano mes
dados[, ano_mes := zoo::as.yearmon(data)]
# Calculando serie
if (tipo == "mes"){
serie = dados[, .(casos = .N), by = .(faixa_etaria, ano_mes)]
} else {
serie = dados[, .(casos = .N), by = .(faixa_etaria, data = get(var))]
}
# Gerando base
if (tipo == "mes"){
base = data.table(expand.grid(faixa_etaria = unique(dados$faixa_etaria),
ano_mes = unique(dados$ano_mes)))
} else {
base = data.table(expand.grid(faixa_etaria = unique(dados$faixa_etaria),
data = seq(min(as.Date("2020-03-01")),
max(as.Date(dados[[var]]), na.rm = TRUE),
by = "day")))
}
# Corrigindo formato
if (tipo == "dia"){
serie[, data := as.Date(data)]
}
# Unindo serie a base
if (tipo == "mes"){
base[serie, casos := casos, on = c("faixa_etaria", "ano_mes")]
base[, casos := ifelse(is.na(casos), 0, casos)]
resultado = dcast(base, faixa_etaria ~ ano_mes, value.var = "casos")
} else {
base[serie, casos := casos, on = c("faixa_etaria", "data")]
base[, casos := ifelse(is.na(casos), 0, casos)]
resultado = dcast(base, faixa_etaria ~ data, value.var = "casos")
}
# Removendo valores faltando
resultado = resultado[!is.na(faixa_etaria),]
# Reordena faixa etaria
setorder(resultado, -faixa_etaria)
# Retornando resultados
return(resultado)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.