Este código es la unión de muchos de los scripts de días anteriores; es un buen ejemplo de uso de la librería gridExtra para poner múltiples gráficos en una sola salida:
library(tidyverse)
library(reshape2)
library(gridExtra)
library(lubridate)
# Carga de datos de fallecidos
df_raw <- read.csv("https://raw.githubusercontent.com/datadista/datasets/master/COVID%2019/ccaa_covid19_fallecidos.csv",
check.names = FALSE, encoding = 'UTF-8')
# Reestructuración de datos
df_long <- melt(df_raw, id.vars = "CCAA", variable.name = "fecha", value.name = "fallecidos")
df_long$fecha <- as.Date(as.character(df_long$fecha), format = "%Y-%m-%d")
# Identificamos las regiones con más fallecidos
ranking <- df_long %>%
group_by(CCAA) %>%
summarise(total = max(fallecidos, na.rm = TRUE)) %>%
arrange(desc(total)) %>%
mutate(CCAA2 = ifelse(row_number() >= 10, 'Resto', as.character(CCAA)))
df_long <- left_join(df_long, ranking[, c("CCAA", "CCAA2")], by = "CCAA")
# Agregamos por la nueva clasificación
df_agrupado <- df_long %>%
group_by(CCAA2, fecha) %>%
summarise(fallecidos = sum(fallecidos)) %>%
ungroup()
# Cálculo del dato diario (lag manual con left_join)
df_anterior <- df_agrupado %>%
mutate(fecha = fecha + 1, fallecidos_anterior = fallecidos) %>%
select(-fallecidos)
df_final <- left_join(df_agrupado, df_anterior, by = c("CCAA2", "fecha")) %>%
mutate(fallecidos_dia = fallecidos - fallecidos_anterior)
# Función para generar los gráficos
grafica_ccaa <- function(comunidad) {
df_pinta <- filter(df_final, CCAA2 == comunidad & !is.na(fallecidos_dia))
ggplot(df_pinta, aes(x = fecha, y = fallecidos_dia)) +
geom_line(alpha = 0.5, color = 'red') +
geom_smooth(method = "loess", formula = y ~ x) +
labs(title = comunidad, x = "", y = "Fallecidos/día") +
theme_minimal()
}
# Generamos los objetos gráficos
g1 <- grafica_ccaa('Madrid')
g2 <- grafica_ccaa('Cataluña')
g3 <- grafica_ccaa('Castilla-La Mancha')
g4 <- grafica_ccaa('Castilla y León')
g5 <- grafica_ccaa('País Vasco')
g6 <- grafica_ccaa('C. Valenciana')
g7 <- grafica_ccaa('Andalucía')
g8 <- grafica_ccaa('Aragón')
g9 <- grafica_ccaa('Resto')
g10 <- grafica_ccaa('Total') # Suponiendo que 'Total' esté calculado
# Composición final
grid.arrange(g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, nrow = 5, ncol = 2)

Del mismo modo podemos analizar el número de casos confirmados:

En este caso es un buen ejemplo de uso de melt() para transponer columnas a filas. Al hacer ésto, el lag lo realizamos mediante un left_join() sumando un día a la fecha, y así podemos calcular la diferencia diaria con el acumulado. Esperemos que este tipo de análisis se estén llevando a cabo en los sitios donde se toman decisiones. Saludos.