Objetivo:
En este laboratorio vamos a introducir shinydashboard. Seguiremos construyendo en el archivo que creamos para una aplicacion basica en el laboratorio Ib, si no terminaste el laboratorio, puedes descargar el checkpoint en este link. Los objetivos de este laboratorio son:
Primero vamos a segurarnos de que tengamos las librerias que usaremos hoy cargadas, si estas empezando a partir del laboratorio anterior, solo agregaremos el paquete shinydashboard
a la lista
# Cargar las librerias
library(shiny)
library(dplyr) # Para manipulacion de datos
library(ggplot2) # Para las figuras
library(shinydashboard) # para crear un dashboard
library(STNet)
Ahora nos aseguramos de que tambien tengamos cargados los datos que usaremos hoy. Asegurate de que hayas cargado previamente el paquete STNet, ya que los datos estan contenidos en esta libreria.
# Cargar los datos del paquete STNet
data("vac") # Datos de vacunacion
data("vigilancia") # datos de vigilancia
data("captura") # Datos de captura
En nuestro laboratorio pasado desarrollamos una aplicacion que inncluye 3 bases de datos, dos inputs, y 4 figuras. En esta aplicacion no vamos a agregar ninguna base de datos ni figuras, pero vamos a organizar nuestra aplicacion para hacerla mas facil de navegar y presentable.
El encabezado contiene el titulo de nuestra aplicacion.
Vamos a crear un nuevo objeto que contenga esta informacion, para esto usamos la funcion dashboardHeader()
# Definir Interfaz
# Encabezado -----------
header <- dashboardHeader(title = 'Nueva aplicacion')
Esta es la parte principal de la app, aqui incluiremos nuestros inputs y outputs
# Body -----------
body <- dashboardBody(
tabItems(
# Primer tab
tabItem(tabName = 'T1',
fluidRow(column(width = 12,
box(title = 'Inputs', width = 12,
selectInput(inputId = "Mun", label = "Municipios:",
choices = unique(vac$NOM_MUN), multiple = T,
selected = unique(vac$NOM_MUN)),
sliderInput(inputId = 'year', label = 'Año',
min = min(as.numeric(vac$YEAR)), max = max(as.numeric(vac$YEAR)),
value = range(vac$YEAR))
),
box(title = 'Vacunacion', width = 6,
plotOutput("VacMun"), # Figura de serie de tiempo
),
box(title = 'Vacunacion boxplot', width = 6,
plotOutput("VacBoxplot"), # Figura de serie de tiempo
),
box(title = 'Vigilancia', width = 6,
plotOutput("VigMun"), # Figura de serie de tiempo
),
box(title = 'Captura', width = 6,
plotOutput("CapMun"), # Figura de serie de tiempo
)
)
)
)
)
)
Finalmente integraremos todos los componentes y guardaremos en el objeto ui:
ui <- dashboardPage(header = header, sidebar = sidebar, body = body)
El resto de nuestra aplicacion se queda igual, ya que solo estamos cambiando la interfaz de usuario.
Vamos a correr la aplicacion para ver nuestro resultado.
# Define server logic required to draw a histogram
server <- function(input, output) {
x <- reactive({
p <- vac %>% # base de datos
filter(NOM_MUN %in% input$Mun,
between(YEAR, input$year[1], right = input$year[2])) # filtramos los datos
})
output$VacMun <- renderPlot({
x() %>%
group_by(YEAR) %>%
summarise(Vac = sum(VAC_BOV)) %>%
ggplot(aes(x = YEAR, y=Vac)) +
geom_bar(position="dodge", stat="identity", fill = "deepskyblue4") +
labs(x = "Año", y = "Dosis de vacuna aplicados",
title = "Aplicación de vacuna antirrábica")
})
output$VacBoxplot <- renderPlot({
x() %>%
group_by(YEAR, NOM_MUN) %>%
summarise(Hatos = sum(TOTAL_HATOS, na.rm = T),
Vacunados = sum(HATOS_VAC, na.rm = T)) %>%
mutate(pVac = Vacunados/Hatos) %>%
ggplot() +
geom_boxplot(aes(x = YEAR, y = pVac)) +
geom_jitter(aes(x = YEAR, y = pVac), width = 0.1)
})
y <- reactive({
p <- vigilancia %>% # base de datos
filter(NOM_MUN %in% input$Mun) %>%
filter(YEAR %in% c("2007", "2008", "2009", "2010", "2011", "2012"))# filtramos los datos
})
output$VigMun <- renderPlot({
y() %>%
group_by(YEAR, RESULTADO) %>%
summarise(N = n()) %>%
ggplot(aes(x = YEAR, y=N, fill=RESULTADO)) +
geom_bar(position="dodge", stat="identity")+
theme(legend.position = "top") +
labs(x = "Año", y = "Muestras enviadas al laboratorio",
title = "Vigilancia epidemiológica de rabia paralítica en el suroeste del Estado de México")
})
z <- reactive({
p <- captura %>% # base de datos
filter(NOM_MUN %in% input$Mun) %>%
filter(YEAR %in% c("2007", "2008", "2009", "2010", "2011", "2012"))# filtramos los datos
})
output$CapMun <- renderPlot({
z() %>%
group_by(YEAR) %>%
summarise(N = n()) %>%
ggplot(aes(x = YEAR, y=N)) +
geom_bar(position="dodge", stat="identity", fill = "red4") +
labs(x = "Año", y = "Eventos de captura de murciélago hematófago",
title = "Control de población de murciélago hematófago")
})
}
# Run the application
shinyApp(ui = ui, server = server)
Una manera de organizar nuestra aplicacion es dividiendo la informacion en multiples tabs, vamos a crear un tab para cada base de datos y moveremos nuestros inputs al sidebar para poder cambiarlos desde cualquier parte de la applicacion.
# Ejercicio
Ahora intenta crear un nuevo tab para la tercera base de datos