R/gera-series-faixa-etaria.R

Defines functions gera_series_faixa_etaria

Documented in gera_series_faixa_etaria

#' @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)

}
mellohenrique/codeplan.boletim2 documentation built on March 20, 2022, 3:15 a.m.