class: inverse, center, middle <br> #### Curso de introducción a R (SFPIE) ## Importar (y exportar) datos con R <br> ### Pedro J. Pérez #### 2021, abril ###### (actualizadas el 23-05-2021) <br><br> #### e-mail: [
](mailto:pedro.j.perez@uv.es) [pedro.j.perez@uv.es](mailto:pedro.j.perez@uv.es) #### Web del curso: [
](https://perezp44.github.io/curso_R_SFPIE_2021/) https://perezp44.github.io/curso_R_SFPIE_2021/ --- class: inverse, center, middle ## Importación de datos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Es la primera etapa para comenzar un análisis de datos <br> <img src="data:image/png;base64,#./imagenes/ss_05_img_01_cargar-datos.png" width="69%" style="display: block; margin: auto;" /> --- ##### ¿Donde están los datos? - En muchos sitios, pero básicamente en 2: - en bases de datos (RDBMS, noSQL, etc ...): una base de datos es una herramienta que almacena datos de forma organizada. - en **ficheros** ##### Además, los datos más habituales en CC.SS son datos tabulares - formatos **tabulares**: `.csv`, `.xlsx`, `.sav` , `.dta`, etc ... - no tabulares: `.json`, `.xml`, etc ... -- <br> ##### Cuando cargemos/importemos esos datos tabulares .... - Habitualmente, se almacenarán internamente en R como **data.frames** (o **tibbles**) --- background-image: url(data:image/png;base64,#imagenes/rio-logo.png) background-position: 99% 1% background-size: 5% ##### Unas ideas generales - Ya sabemos que generalmente usaremos **datos tabulares** provenientes de **archivos**, que se almacenaran en R como **data.frames** -- - RStudio permite cargar datos a través de menús (`File > Import Dataset`). Por menús se pueden cargar datos CSV, EXCEL, SPSS, SAS y STATA. Se puede hacer, pero no lo haremos, ¿por qué? -- - Para importar y exportar los datos usaremos funciones, funciones que pertenecen a algún paquete. Podríamos usar los paquetes de R-base, pero ya sabéis que el curso está orientado al `tidyverse`. -- - Los principales paquetes del tidyverse para importar y exportar datos son: [readr](https://readr.tidyverse.org/), [haven](https://haven.tidyverse.org/) y [readxl](https://readxl.tidyverse.org/). -- ##### A pesar de ello ... usaremos el paquete rio - A pesar de ello, vamos a usar un paquete que, sin que lo veamos, llama/utiliza indirectamente esos paquetes y otros, y que permite importar y exportar ficheros en casi cualquier formato. - **Utilizaremos el paquete [`rio`](https://github.com/leeper/rio)**. En su web pone que el paquete **rio** es "A Swiss-Army Knife for Data I/O". -- --------------------- Bueno, ya vale de "teoría", vamos a aprender a cargar/importar datos mediante una serie de **ejemplos** --- class: inverse, center, middle ### Ejemplos: importar (y exportar) datos tabulares de ficheros <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Los ficheros pueden estar en .center[ - un paquete de R - en Internet - en nuestro ordenador ] --- ##### Datos almacenados en los paquetes - Sí, los paquetes suelen tener funciones y documentación, pero también datos. <br> - Intenta entender que hacen las siguientes instrucciones. En nada lo explico yo. ```r #- cuanto iniciamos R se cargan automaticamente un grupo de paquetes (R-base) print(.packages()) #- [🌶]imprimimos los nombres de los "currently attached packages" #- en uno de esos paquetes hay un conjunto de datos llamado "iris" iris #- llamamos a "iris" str(iris) #- qué es iris? find("iris") #- [🌶] ¿donde estaba iris? my_iris <- iris #- "hacemos una copia" de iris find("my_iris") #- ¿donde está my_iris? iris <- iris #- ??? find("iris") #- ¿donde está ahora iris? ``` --- #### Ejercicio: datos almacenados en los paquetes .bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea] Resulta que quiero usar unos datos, están el fichero de datos `penguins`, pero resulta que ese fichero de datos está en un paquete. El paquete se llama `palmerpenguins`. El paquete está en CRAN, pero si quieres ver su repo en Github, está [aquí](https://github.com/allisonhorst/palmerpenguins). Bueno, la tarea está clara: carga en memoria los datos de los pingüinos, el fichero `penguins`. <br> ] .panel[.panel-name[Solución] <br> - Ni se te ocurra mirar la solución hasta que lo hayas intentado!!! - te rindes? Bueno, a veces hay que rendirse, mira en el siguiente tab. ] .panel[.panel-name[Más] - Te has rendido, bueno ...., primero tienes que instalar el paquete, luego cargarlo en memoria y ya puedes llamar al fichero de datos `penguins` ```r #- en el pkg palmerpenguins hay 2 conjuntos de datos library(palmerpenguins) #- install.packages("palmerpenguins") #- ya podemos usar los datos de penguins xq hemos cargado (attach) el paquete en memoria de R penguins my_penguins <- penguins #- quiero tb hablaros de la siguiente expresión #- es importante acostumbrarse a ella [ 🌟 ] palmerpenguins::penguins ``` ] ] ] --- class: inverse, center, middle background-image: url(data:image/png;base64,#imagenes/rio-logo.png) background-position: 98% 2% background-size: 7% # Importación de datos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> ### Vamos a usar el paquete *rio* para cargar datos <br> --- background-image: url(data:image/png;base64,#imagenes/rio-logo.png) background-position: 99% 1% background-size: 5% #### Importando datos con el paquete `rio` - `rio` solo tiene dos funciones: `import()` y `export()`. ¿Adivinas que hace cada una de ellas? -- - Empecemos con `import()`. La función `import()` tiene varios argumentos, pero generalmente solo usaremos el primero. - Su primer argumento se llama `file` y su descripción es: "A character string naming a file, URL, or single-file .zip or .tar archive". WTF!! -- .bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea] En esta dirección de internet: <https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv> hay un fichero de datos. Por favor, utiliza la función `rio::import()` para cargar esos datos en memoria de R ] .panel[.panel-name[Solución] ```r rm(list = ls()) #- antes vamos a limpiar el Global env. la_direccion <- "https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv" rio::import(la_direccion) #- ¿qué ha pasado??? iris <- rio::import(la_direccion) #- y ahora ¿qué ha pasado? ``` .panel[.panel-name[Solución (extended)] ```r rm(list = ls()) #- antes vamos a limpiar el Global env. la_direccion <- "https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv" iris_1 <- rio::import(la_direccion) #- como un data.frame iris_2 <- rio::import(la_direccion, setclass = "tibble") #- como tibble iris_3 <- tibble::as_tibble(iris_1) #- convertimos df_1 a tibble ``` ] ] ] ] --- class: inverse, center, middle # Exportación de datos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> ### Luego seguiremos cargando/importando datos, ahora vamos a exportar --- #### Exportando datos con el paquete `rio` - Tenéis que usar la función `rio::export()`. Esta función también tiene varios argumentos, pero los principales son los dos primeros, llamados `"x"` y `"file"` --
01
:
00
.bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea 1] Tendrás que apañártelas para hacer la siguiente tarea. No patixques, enseguida lo hacemos juntos, pero seguro que la mayoría sabréis sin ayuda. <br> Por favor, utiliza la función `rio::export()` para exportar a un fichero (de tu ordenador) el conjunto de datos `iris` en formato `.csv`. ] .panel[.panel-name[Solución 1] ```r rm(list = ls()) #- [🌶] antes vamos a limpiar el Global env. my_iris <- iris rio::export(my_iris, "my_iris.csv") #- sin los nombres de los argumentos rio::export(x = my_iris, file = "my_iris.csv") #- CON los nombres de los argumentos #- IMPORTANTE: ¿Donde hemos guardado my_iris? [ 🌟 ] ``` ] .panel[.panel-name[Tarea 2] - ¿Donde hemos guardado antes el fichero "my_iris.csv"? En el "directorio de trabajo" - Puedes guardar ahora otra vez my_iris, pero que se guarde en una subcarpeta del Rroject, concretamente en una subcarpeta llamada `"pruebas"` (primero tendrás que crear esa carpeta) ] .panel[.panel-name[Solución 2] - Puedes crear la carpeta "pruebas" a mano, pero yo prefiero crearla con código ```r fs::dir_create("pruebas") #- [🌶] creo el subdirectorio rio::export(my_iris, "./pruebas/my_iris.csv") ``` - Perfecto, pero es mejor construir la ruta utilizando el pkg "here". Tiene ventajas, y es la forma que usaremos cuando nos acostumbremos. [ 🌟 ] ```r la_ruta <- here::here("pruebas", "my_iris.csv") rio::export(my_iris, la_ruta) rio::export(my_iris, here::here("pruebas", "my_iris.csv")) ``` ] ] ] --- #### Seguimos exportando datos con el paquete `rio` .bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea 1] Por favor, utiliza la función `rio::export()` para exportar el conjunto de datos `iris` a varios ficheros de tu ordenador. Concretamente has de exportar `iris` a los siguientes formatos: `.csv`, `.xlsx` y `.sav`. ] .panel[.panel-name[Solución 1] ```r rio::export(iris, here::here("pruebas", "iris.csv")) rio::export(iris, here::here("pruebas", "iris.xlsx")) rio::export(iris, here::here("pruebas", "iris.sav")) ``` ] .panel[.panel-name[Tarea 2] Por favor, utiliza la función `rio::export()` para exportar el conjunto de datos `penguins` del paquete `palmerpenguins` a varios ficheros de tu ordenador. Concretamente has de exportar los datos de los pingüinos a los siguientes formatos: `.csv`, `.xlsx` y `.dta`. ] .panel[.panel-name[Solución 2] ```r rio::export(palmerpenguins::penguins, here::here("pruebas", "pinguinos.csv")) rio::export(palmerpenguins::penguins, here::here("pruebas", "pinguinos.xlsx")) rio::export(palmerpenguins::penguins, here::here("pruebas", "pinguinos.dta")) ``` ] ] ] --- class: inverse, center, middle # Volvemos a IMPORTAR <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> ### Vamos a importar los ficheros que hemos creado previamente. --- #### Seguimos importando datos con el paquete `rio` .bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea 1] Por favor, utiliza la función `rio::import()` para importar (cargar en memoria) los datos que hay en el fichero `"./pruebas/iris.csv"` Después importa los datos del fichero: `"./pruebas/iris.xlsx"` ] .panel[.panel-name[Solución 1] ```r rm(list = ls()) iris_1 <- rio::import(here::here("pruebas", "iris.csv")) iris_2 <- rio::import(here::here("pruebas", "iris.xlsx")) ``` ] .panel[.panel-name[Tarea 2] Por favor, utiliza la función `rio::import()` para importar los datos que haya en el fichero: `"./pruebas/pinguinos.csv"`. Después importa los datos del fichero: `"./pruebas/pinguinos.xlsx"` Después importa los datos del fichero: `"./pruebas/pinguinos.dta"` ] .panel[.panel-name[Solución 2] Esta vez ya no hay solución!!! Tienes que acostumbrarte a escribir en R. Ya te manejas leyendo, PERO hay que empezar a escribir!! ] ] ] --- background-image: url(data:image/png;base64,#imagenes/hot-pepper_1f336.png) background-position: 99% 1% background-size: 3% ### Una última cosa Es importante que diferenciéis entre descargarse un fichero y cargar el fichero en R, cargar el fichero en memoria de R <br> - Con `download.file()` descargamos el fichero y lo guardamos en un fichero en nuestro ordenador ```r #- en esta url hay un fichero de datos en formato .csv my_url <- "https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv" download.file(url = my_url, destfile = here::here("pruebas", "iris_descargado.csv")) ``` <br> - Con `rio::import()` no guardamos el fichero, sino que **lo cargamos en memoria de R**, en el Global Env. ```r aa <- rio::import(my_url) ``` --- class: inverse, center, middle background-image: url(data:image/png;base64,#imagenes/hot-pepper_1f336.png) background-position: 99% 1% background-size: 3% # Algunos BONUS de I/O <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> ### Con lo que hemos visto hasta ahora nos apañamos, pero conviene ver alguna cosa más ... --- #### Bonus 1: exportar los datos de un df en un archivo `.xlsx` ya existente. ```r #- bonus: le añadimos un libro mas al archivo "./pruebas/iris.xlsx" rio::export(x = iris, file = here::here("pruebas", "iris.xlsx"), which = "iris_2") ``` -- <br> ---------------- <br> #### Bonus 2: (!!) exportar 2 df's en un único archivo `.xlsx` ```r rio::export(x = list(iris = iris, pinguinos = palmerpenguins::penguins), file = here::here("pruebas", "my_iris_pinguinos.xlsx")) ``` --- #### Bonus 3: (!!) importar una hoja/libro especifica de un archivo `.xlsx` ```r iris_1 <- rio::import(here::here("pruebas", "my_iris_pinguinos.xlsx")) #- solo importa el primer libro pinguinos_1 <- rio::import(here::here("pruebas", "my_iris_pinguinos.xlsx"), sheet = 2) pinguinos_2 <- rio::import(here::here("pruebas", "my_iris_pinguinos.xlsx"), sheet = "pinguinos") ``` --- #### Bonus 4: (!!!!) importamos todos los libros de un archivo `.xlsx` ```r *library(readxl) my_dfs_list <- lapply(excel_sheets(here::here("pruebas", "my_iris_pinguinos.xlsx")), read_excel, path = here::here("pruebas", "my_iris_pinguinos.xlsx")) ``` <br> -- ------------ <br> #### Bonus 5: (!!!!!!) importamos todos archivos de datos de una carpeta concreta; por ejemplo vamos a cargar en memoria de R todos los ficheros de datos que tenemos en la carpeta `"pruebas"` ```r #- importamos todos los archivos que hemos creado en "./pruebas/" *library(purrr) my_carpeta <- here::here("pruebas") lista_de_archivos <- list.files(my_carpeta) #- Ok con base ... lista_de_archivos <- fs::dir_ls(my_carpeta) #- pero mejor con el pkg "fs" my_dfs_list_2 <- map(lista_de_archivos, rio::import) ``` --- background-image: url(data:image/png;base64,#imagenes/hot-pepper_1f336.png) background-position: 99% 1% background-size: 3% ##### Vamos a dejar limpia la carpeta `"./pruebas/"` ```r #- vamos a limpiar el Rproject: vamos a borrar los archivos q hemos creado: list.files("./pruebas") #- listado de archivos en la carpeta "./pruebas" file.remove("./pruebas/pinguinos.dta") #- borramos un archivo #- borramos todos los archivos de ./pruebas/ file.remove(file.path("./pruebas", list.files("./pruebas"))) #- borramos toda la carpeta con el pkg fs fs::dir_delete("pruebas") ``` --- class: inverse, center, middle # Aún tenemos que ver alguna cosa más <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> -- <br> Formatos de datos propios de R -- Obtener datos a través de API's -- Webscrapping --- ### Formatos de datos propios de R - Guardar datos en formatos como `.csv` o `.xlsx` es lo más habitual si quieres abrir estos datos en otros programas, pero ... - ... pero al grabar en estos formatos guardas los datos, PERO no guardas los metadatos; por ejemplo, si una columna la has definido como un factor o como integer, esta información se perderá. En estos casos, una solución es usar los formatos propios de R. <br> #### R tiene 2 formatos propios de datos (.rds y .rda) - si quieres grabar un solo objeto, es preferible hacerlo como `.Rds` - si quieres grabar varios objetos tienes que hacerlo como `RData` o abreviado como `.Rda` --- #### Formato .RData El formato `.RData` tienen la ventaja de que **puedes guardar varios objetos a la vez**. Una “desventaja” del formato RData es que al importar un fichero .RData, los objetos que contiene se cargan siempre con el nombre con el que fueron grabados. <br> - Exportando datos a formato `.Rda` ```r save(mtcars, iris, file = here::here("pruebas", "mtcars_and_iris.RData") ``` <br> - Importando datos en formato `.Rda`: tienes que usar la función `load()` ```r load(here::here("pruebas", "mtcars_and_iris.RData")) ``` <br> --- #### Formato .rds - (3 formas de) Exportar datos a formato `.rds` ```r saveRDS(iris, here::here("pruebas", "iris_1.rds")) #- con base-R readr::write_rds(iris, here::here("pruebas", "iris_2.rds")) #- con pkg "readr" *rio::export(iris, here::here("pruebas", "iris_3.rds")) ``` - (3 formas de) Importar datos en formato `.rds` ```r my_iris_1 <- readRDS(here::here("pruebas", "iris_3.rds")) #- con R-base my_iris_1 <-readr::read_rds(here::here("pruebas", "iris_3.rds")) #- tidyverse *my_iris_2 <- rio::import(here::here("pruebas", "iris_3.rds")) ``` --- class: inverse, center, middle ## Acceder a datos a través de API's <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Hay muuuuuchas organizaciones que ofrecen datos a traves de API's y, en muchas ocasiones, hay un paquete de R para acceder fácilmente a ellos!!! --- ### Eurostat ```r # install.packages("eurostat") library(eurostat) df <- get_eurostat("cult_emp_sex", time_format = 'raw', keepFlags = T) #- bajamos los datos de la tabla "cult_emp_sex": empleo cultural por genero" ``` <br> - Si quieres probar tu mismo a bajar datos de Eurostat: ```r # install.packages("eurostat") library(eurostat) #- podemos buscar un "tema" con la f. search_eurostat() aa <- search_eurostat("employment", type = "all") #- elegimos una tabla de Eurostat my_table <- "hlth_silc_17" #- elegimos una tabla; por ejemplo "hlth_silc_17": "Healthy life expectancy based on self-perceived health" label_eurostat_tables(my_table) #- da informacion sobre la Base de datos q estas buscando #- descargamos los datos con get_eurostat() df <- get_eurostat(my_table, time_format = "raw", keepFlags = TRUE ) #- bajamos los datos de una tabla df_l <- label_eurostat(df) #- pone labels: mas legible, menos fácil de programar ``` --- ### El paquete `quantmod` Permite acceder a una gran variedad de datos económicos. [Aquí](https://www.quantmod.com/) está su web. ```r library(quantmod) #- install.packages("quantmod") #- For stocks and shares, the yahoo source is used. facebook <- getSymbols(Symbols = 'FB', src = 'yahoo', auto.assign = FALSE) #- For currencies and metals, the oanda source is used. S tc_euro_dolar <- getSymbols(Symbols = 'EUR/USD', src = 'oanda', auto.assign = FALSE) #- For economics series, the FRED source is used. Japan_GDP <- getSymbols(Symbols = 'JPNNGDP', src = 'FRED', auto.assign = FALSE) ``` --- class: inverse, center, middle ## Webscrapping <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> ### Obtener datos directamente de páginas web, de su código html. --- ### Webscrapping - Pueblos más "altos" de Teruel: [aquí](https://es.wikipedia.org/wiki/Anexo:Municipios_de_la_provincia_de_Teruel) puedes ver la tabla ```r library(rvest) library(tidyverse) my_url <- "https://es.wikipedia.org/wiki/Anexo:Municipios_de_la_provincia_de_Teruel" content <- read_html(my_url) body_table <- content %>% html_nodes('body') %>% html_nodes('table') %>% html_table(dec = ",") #- solo hay una tabla Teruel <- body_table[[1]] #- estoy haciendo subsetting de una lista ``` Vamos a arreglar un poco la tabla ```r names(Teruel) <- c("Nombre", "Extension", "Poblacion", "Densidad", "Comarca", "Partido_judicial", "Altitud") library(stringr) Teruel <- Teruel %>% map(str_trim) %>% as_tibble() #- quita caracteres al final Teruel <- Teruel %>% mutate(Altitud = str_replace_all(Altitud,"[[:punct:]]", "")) Teruel <- Teruel %>% mutate(Altitud = as.double(Altitud)) %>% arrange(desc(Altitud)) ``` --- ### Webscrapping - Covid: en [esta página](https://es.wikipedia.org/wiki/Pandemia_de_enfermedad_por_coronavirus_de_2020_en_Espa%C3%B1a) tenemos datos sobre covid. ```r library(rvest) library(tidyverse) my_url <- "https://es.wikipedia.org/wiki/Pandemia_de_enfermedad_por_coronavirus_de_2020_en_Espa%C3%B1a" content <- read_html(my_url) body_table <- content %>% html_nodes('body') %>% html_nodes('table') %>% html_table(dec = ",", fill = TRUE) #- la página web tiene 10 tablas, seleccionamos 2 tabla_6 <- body_table[[6]] tabla_7 <- body_table[[7]] ``` --- class: inverse, center, middle ## Hagamos un caso un poquito más complejo <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Lo tenéis que hacer vosotros y cuenta para nota (😜) --- #### Ejercicio: - Resulta que quiero saber que provincia tiene más municipos, así que me voy al INE, concrétamente [aquí](https://www.ine.es/daco/daco42/codmun/codmunmapa.htm). En esa página hay un fichero que nos permitirá contar el nº de municipios. -- .bg-washed-purple.b--dark-purple.ba.bw2.br3.shadow-5.ph4.mt5[ .panelset[ .panel[.panel-name[Tarea] Hay que descargar el fichero con la relación de municipios del INE. El fichero está aquí: <https://www.ine.es/daco/daco42/codmun/codmun20/20codmun.xlsx> - Primero vamos a hacerlo con el paquete `rio` - Después vamos a ver como podríamos importarlo con menús (que no nos vea Hadley!!) - Después lo haremos con el paquete `readxl` - Por último la haremos un poco más "profesional" ] .panel[.panel-name[Solución 1 (con rio)] - Primero con el paquete `rio` ```r rm(list = ls()) #- antes vamos a limpiar el Global env. my_url <- "https://www.ine.es/daco/daco42/codmun/codmun20/20codmun.xlsx" download.file(my_url, here::here("pruebas", "ine_rel_muni.xlsx")) #- lo guardo en disco df_1 <- rio::import(my_url) ``` - ¿Qué problema tenemos? ] .panel[.panel-name[Solución 2 (por menús)] - Vamos a usar menús, pero que no nos vea Hadley!!! - Seguid la siguiente ruta de menús: `File > Import Dataset > From Excel ...` - Pegáis en la caja de texto el `url` y pincháis el botón `update` - .... ] .panel[.panel-name[Solución 3 (con `readxl`)] - Puedes crear la carpeta "pruebas" a mano, pero yo prefiero crearla con código ```r df_2 <- readxl::read_xlsx(my_url, skip = 1) #- no funciona. solo lee del PC df_2 <- readxl::read_xlsx(here::here("pruebas", "ine_rel_muni.xlsx"), skip = 1) ``` ] ] ] --- background-image: url(data:image/png;base64,#imagenes/hot-pepper_1f336.png) background-position: 99% 1% background-size: 3% ##### Podemos hacerlo un poco más "profesional", por ejemplo ... - Descargo el archivo en una carpeta temporal [🌶] ```r #- script para bajar la relación de municipios INE a 1 de enero de 2021 url_descarga <- "https://www.ine.es/daco/daco42/codmun/diccionario21.xlsx" nombre_fichero <- "diccionario21.xlsx" fs::dir_create("tmp") #- creo un directorio temporal my_ruta <- here::here("tmp", nombre_fichero) #- ruta para guardar el fichero curl::curl_download(url = url_descarga, destfile = my_ruta) ``` <br> - Importo el fichero a la memoria de R ```r df <- readxl::read_xlsx(path = my_ruta, skip = 1) #- la verdad es que skip = 1 también hubiese funcionado con el paquete `rio` #- ya que `rio` llama a `readxl` ``` --- background-image: url(data:image/png;base64,#imagenes/hot-pepper_1f336.png) background-position: 99% 1% background-size: 3% ##### ... seguimos con el ejemplo - Arreglo los datos a mi gusto [🌶] ```r library(tidyverse) df <- df %>% mutate(ine_muni = paste0(CPRO, CMUN)) %>% mutate(year = "2021") %>% #- !! cómo lo guardaría? mutate(year = as.numeric(year)) %>% rename(ine_muni.n = NOMBRE) %>% rename(ine_prov = CPRO) %>% select(ine_muni, ine_muni.n, ine_prov, year) str(df) ``` <br> - Exporto el archivo (por si lo quiero guardar) ```r readr::write_csv(df, file = here::here("tmp", "my_relacion_muni_2021.csv")) ``` --- ##### Como véis no he contado el nº de municipios por provincia - Se puede hacer de varias maneras, abajo tienes 2: ```r df_muni <- df %>% group_by(ine_prov) %>% summarise(numero_muni = n()) df_muni <- df %>% count(ine_prov) ``` ##### Si quisiéramos saber el nombre de las provincias ... - tenemos que cargar un nuevo fichero con esa información: ```r codigos_prov <- pjpv.datos.01::pob_prov_1996_2020 %>% filter(year == 2020) str(codigos_prov) ``` - Para finalmente fusionar los 2 ficheros: ```r #- fusiono los 2 ficheros (lo veremos!!) df_ok <- left_join(df_muni, codigos_prov) ``` - Borro la carpeta `tmp` para dejar el Rproject limpio ```r fs::dir_delete("tmp") #- [🌶] borro el directorio temporal ```