#' @title Transforma em data.table
#'
#' @description Transoforma um data.frame em data.table
#'
#' @param dados um data.frame a ser convertido em data.table
#'
#' @return Os dados em formato data.table
#'
#' @import data.table
transforma_dt = function(dados){
if(!is.data.table(dados)){
dados = as.data.table(dados)
}
# Retorna resultados
return(dados)
}
#' @title Gera media movel
#'
#' @description Gera media movel de 7 e 14 dias para dados de casos por cadastro ou primeiros sintomas ou para dados de obitos por data de obito ou data de notificacao
#'
#' @param dados um data.frame a ser convertido em data.table
#' @param datas um data.table com as datas a serem consideradas
#' @param medida o nome da variavel em caractere a ser considerado, nao necessario nos dados de obito por notificacao do ministerio da saude
#'
#' @return data.table com media.movel da variavel de interesse
#'
#' @import data.table
gera_media_movel <- function(dados, datas, medida = c("cadastro", "primeiros_sintomas", "data_obito"), ms = FALSE){
# Conformando ao tipo data.table
medida = match.arg(medida)
dados = transforma_dt(dados)
datas = transforma_dt(datas)
if(ms){ # Se dados do ministerio da saude, seleciona colunas adequadas e corrige formato de data
dados = dados[, .(data, casos = obitosNovos)]
dados = dados[, data := as.Date(data)]
} else { # Caso contrario, cria-se serie de casos ou obitos para a medida considerada
dados = merge(datas, dados[,data := as.Date(get(medida))][,.(casos = .N), by = data], all.x = TRUE)[, casos := ifelse(is.na(casos), 0, casos)]}
# Calcula-se a media movel
dados[,`:=`(
`Média móvel de 7 dias` = frollmean(casos, 7, align = "right", fill = NA),
`Média móvel de 14 dias` = frollmean(casos, 14, align = "right", fill = NA))]
# Coloca em formato tidy
dados = melt(dados, id.vars = c("data", "casos"), value.name = "valor", variable.name = "tipo")
# Retorna resultados
return(dados)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.