class: inverse, center, middle # Importar (y exportar) datos con R ##### (Slides 05 del curso Programación y manejo de datos con R) ### Pedro J. Pérez #### Universitat de València #### 2020, septiembre ###### (actualizadas el 25-10-2020) <br><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/intro-ds-20-21-web/) https://perezp44.github.io/intro-ds-20-21-web/ --- 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="./imagenes/ss_05_img_01_cargar-datos.png" width="70%" style="display: block; margin: auto;" /> --- ## ¿Donde narices están los datos? - Pues como el amor: Love is in the air. Vamos que están en todas partes. - Vale, ¿pero donde? -- <br> - De verdad, están en muchos sitios, pero básicamente en 3: - en bases de datos (RDBMS, noSQL, etc ...): una base de datos es una herramienta que almacena datos de forma organizada. - en la "web" y dispositivos "inteligentes" - en **ficheros** --- class: inverse, center, middle ## Nos centraremos en datos almacenados en ficheros <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Sí, habitualmente, en R se trabaja con datos provenientes de ficheros. <br> #### Esos datos, en general, se almacenan internamente en R como data.frames/tibbles --- #### Basicamente aprenderemos a analizar/manejar/manipular datos almacenados en ficheros - Sí, trabajaremos en R con datos almacenados en **ficheros** - Sí, PERO ... ese fichero con datos se ha podido generar de varias formas: - alguien ha generado "a mano" el fichero - alguien ha generado el fichero haciendo una consulta a una base de datos (seguramente a través de una API) - alguien ha generado el fichero obteniendo los datos directamente de internet (Webscrapping) <br> --- #### Aprenderemos a manejar datos almacenados en ficheros - Además, los tipos de datos más habituales en Ciencias Sociales son los **datos tabulares**. - Ya sabéis que los datos almacenados en ficheros pueden estar en varios formatos: `.csv`, `.xlsx`, `.sav` , `.dta`, `.json`, `.xml`, etc ..., etc ... <br> -- - Además, lógicamente, el fichero con los datos que vamos a analizar puede estar ("físicamente") en varios sitios: - en un paquete de R - en nuestro ordenador - en internet --- ### Unas ideas generales - Generalmente usaremos **datos tabulares almacenados en archivos** e internamente 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, 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. Vamos alla: --- class: inverse, center, middle ## Ejemplos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Ejemplos para aprender a importar datos en R --- ### Datos almacenados en los paquetes - Sí, los paquetes suelen tener funciones y documentación, pero también datos. - Intenta entender que hacen las siguientes instrucciones. En nada lo explico yo. ```r (.packages()) #- nos da los nombres de los "currently attached packages" aa <- as.data.frame(.packages()) iris str(iris) #- qué es iris? find("iris") #- donde estaba iris? my_iris <- iris #- "hacemos" una copia de iris? find("my_iris") iris <- iris find("iris") ``` --- #### 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, es el fichero de datos `penguins`, pero resulta que ese fichero de datos está disponible 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 #- install.packages("palmerpenguins") library(palmerpenguins) data(package = "palmerpenguins") #- el paquete tiene 2 conjuntos de datos #- 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 palmerpenguins::penguins ``` ] ] ] --- class: inverse, center, middle # 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> --- #### 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 1] ```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??? aa <- rio::import(la_direccion) #- como un data.frame bb <- rio::import(la_direccion, setclass = "tibble") #- como tibble cc <- tibble::as_tibble(aa) ``` ] ] ] --- 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"` -- .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, en seguida 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") rio::export(x = my_iris, file = "my_iris.csv") ``` ] .panel[.panel-name[Tarea 2] - ¿Donde se ha guardado el fichero "my_iris.csv"? - Puedes guardar ahora otra vez 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") ``` - Otra forma de hacerlo. Tiene ventajas, y es la forma que usaremos cuando nos acostumbremos ```r ruta <- here::here("pruebas", "my_iris.csv") rio::export(my_iris, 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!! ] ] ] --- ### 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 # 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) ``` --- ##### 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 - 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")) ``` - 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 ```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 ```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 16 tablas tabla_8 <- body_table[[8]] tabla_11 <- body_table[[11]] ``` --- class: inverse, center, middle # That's all - FIN!! <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> <br> #### Se acabaron las slides. En la siguiente página solo está el código de las slides en un único chunk. --- #### El código de las slides (en un único chunk) ```r #- script de las slides 05: importar datos -------------------------- (.packages()) #- nos da los nombres de los "currently attached packages" aa <- as.data.frame(.packages()) iris str(iris) #- qué es iris? find("iris") #- donde estaba iris? my_iris <- iris #- "hacemos" una copia de iris? find("my_iris") iris <- iris find("iris") #----------------------- #- install.packages("palmerpenguins") library(palmerpenguins) data(package = "palmerpenguins") #- el paquete tiene 2 conjuntos de datos #- 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 palmerpenguins::penguins #--------------------------- 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??? aa <- rio::import(la_direccion) #- como un data.frame bb <- rio::import(la_direccion, setclass = "tibble") #- como tibble cc <- tibble::as_tibble(aa) #------------------------ rm(list = ls()) #- antes vamos a limpiar el Global env. my_iris <- iris rio::export(my_iris, "my_iris.csv") rio::export(x = my_iris, file = "my_iris.csv") #- fs::dir_create("pruebas") #- creo el subdirectorio rio::export(my_iris, "./pruebas/my_iris.csv") ruta <- here::here("pruebas", "my_iris.csv") rio::export(my_iris, ruta) rio::export(my_iris, here::here("pruebas", "my_iris.csv")) rio::export(iris, here::here("pruebas", "iris.csv")) rio::export(iris, here::here("pruebas", "iris.xlsx")) rio::export(iris, here::here("pruebas", "iris.sav")) 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")) rm(list = ls()) iris_1 <- rio::import(here::here("pruebas", "iris.csv")) iris_2 <- rio::import(here::here("pruebas", "iris.xlsx")) pinguinos_1 <- rio::import(here::here("pruebas", "pinguinos.csv")) pinguinos_2 <- rio::import(here::here("pruebas", "pinguinos.xlsx")) pinguinos_3 <- rio::import(here::here("pruebas", "pinguinos.dta")) #- 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")) aa <- rio::import(my_url) #- bonus: le añadimos un libro mas al archivo "./pruebas/iris.xlsx" #- bonus: le añadimos un libro mas al archivo "./pruebas/iris.xlsx" #- 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") #- Bonus 2 rio::export(x = list(iris = iris, pinguinos = palmerpenguins::penguins), file = here::here("pruebas", "my_iris_pinguinos.xlsx")) #- Bonus 3 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 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")) #- Bonus 5 #- 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) #- limpiamos --------------------------------------- #- vamos a borrar los archivos q hemos creado: list.files("./pruebas") #- listado de archivos en la carpeta "./pruebas" file.remove("./pruebas/pinguinos.dta") #- xq no funciona #- borramos todos los archivos de ./pruebas/ file.remove(file.path("./pruebas", list.files("./pruebas"))) # borramos toda la carpeta fs::dir_delete("pruebas") # retrieve Facebook quotes x <- quantmod::getSymbols(Symbols = 'FB', src = 'yahoo', auto.assign = FALSE) tail(x) #- Webscrapping página covid de la wikipedia 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) tabla_8 <- body_table[[8]] tabla_11 <- body_table[[11]] ```