--- title: "Mi Dashboard" output: flexdashboard::flex_dashboard runtime: shiny --- ```{r global, include=FALSE} # load data in 'global' chunk so it can be shared # by all users of the dashboard library(highcharter) library(fpp3) library(RColorBrewer) library(openxlsx) library(leaflet) library(sf) library(plotly) library(ggplot2) library(tidyverse) # asociamos funciones a determinadas librerías para evitar posibles errores filter <- dplyr::filter # Filtra filas según condiciones select <- dplyr::select # Selecciona columnas mutate <- dplyr::mutate # Crea o modifica columnas arrange <- dplyr::arrange # Ordena filas group_by <- dplyr::group_by # Agrupa datos summarise <- dplyr::summarise # Resume variables (por ejemplo, con medias, conteos) summarize <- dplyr::summarize # Lo mismo que summarise rename <- dplyr::rename # Cambia nombres de columnas distinct <- dplyr::distinct # Elimina filas duplicadas slice<- dplyr::slice # Selecciona filas por posición relocate<- dplyr::relocate # Reordena columnas selectInput <- shiny::selectInput ``` ```{r,message=FALSE,echo=FALSE} # leemos los datos owid.country <- read.xlsx('https://ctim.es/AEDV/data/owid_country.xlsx',sheet=1) |> as_tibble() # leemos la geometría de los países: se descarga primero a un fichero temporal # porque, en algunos sistemas, st_read no puede acceder directamente a URLs https tmp <- tempfile(fileext = ".geojson") curl::curl_download('https://ctim.es/AEDV/data/geo_countries.geojson', tmp) geoj <- st_read(tmp, quiet = TRUE) geoj.tb <- geoj |> as_tibble() ``` ```{r} source("https://ctim.es/AEDV/utilidades.R") # Funciones auxiliares del curso (aedv_mapa_coropletico) ``` # Mapa Coroplético Column {.sidebar data-width=250} -------------------------------------------------- ```{r} # selector para seleccionar los países selectInput( "indicator", label = "Indicator:", choices = owid.country |> select(population:human_development_index) |> colnames(), selected = "population" ) # botón que lanza el cálculo: hasta pulsarlo no se calcula nada, ni al # arrancar ni al cambiar el indicador actionButton("calcular", "Calcular") ``` ```{r} # función que realiza el procesado de los datos y que se actualiza al pulsar # el botón "Calcular" (eventReactive). Al arrancar no se calcula nada, para # que el cuadro de mandos cargue antes: la tabla y el mapa quedan vacíos # hasta el primer clic inputs.processing.Dashboard2 <- eventReactive(input$calcular, { tb <- owid.country |> select( iso_code, country=location, value = input$indicator ) |> na.omit() |> arrange(desc(value)) return(tb) }) ``` ### ```{r} # imprimimos la tabla con el atributo seleccionado renderTable({ # capturamos el resultado del procesado de los inputs tb <- inputs.processing.Dashboard2() tb |> mutate(value=prettyNum(round(value, digits=max(5-nchar(as.character(round(max(na.omit(tb$value))))),0)), big.mark = ",") ) |> select(-iso_code) }) ``` Column -------------------------------------------------- ### ```{r} # dibujamos el mapa coroplético leaflet::renderLeaflet({ # capturamos el resultado del procesado de los inputs tb <- inputs.processing.Dashboard2() # combinamos la tabla de gráficos y los datos join <- geoj.tb |> left_join(tb,join_by("ISO_A3" == "iso_code")) # construcción etiquetas etiquetas <-paste( " ",geoj.tb$ADMIN , "
",input$indicator, ": ",prettyNum(round(join$value,digits=2), big.mark = ",", scientific = FALSE) ) |> lapply(htmltools::HTML) # dibujamos el mapa aedv_mapa_coropletico(geoj,join$value,etiquetas,input$indicator) }) ```