Capítulo 3 Rutas, Importación y exportación de datos en R
En esta sección veremos como importar diversos formatos de archivos a R, utilizando distintas funciones y packages. Además veremos como escribir rutas de forma más fácil.
3.1 Rutas
3.1.1 Rutas Absolutas
- Hacen referencia a la ruta completa en que se ubica cierto archivo. En mi caso estoy trabajando este archivo en la siguiente ruta absoluta:
getwd()
[1] "D:/Otros/web/personal-book"
- Podemos ver los archivos que hay en la ruta con el siguiente comando:
list.files()
[1] "_bookdown.yml"
[2] "_bookdown_files"
[3] "_output.yml"
[4] "01-recomendaciones.Rmd"
[5] "02-guia-de-estilo.Rmd"
[6] "03-rutas-importacion-exportacion.Rmd"
[7] "04-magrittr-dplyr.Rmd"
[8] "05-dataviz.Rmd"
[9] "06-ggplot2.Rmd"
[10] "07-rmarkdown.Rmd"
[11] "08-mis-proyectos.Rmd"
[12] "09-palabras-finales.Rmd"
[13] "10-referencias.Rmd"
[14] "book.bib"
[15] "css"
[16] "data"
[17] "datasets"
[18] "datos"
[19] "docs"
[20] "figuras"
[21] "images"
[22] "index.Rmd"
[23] "latex"
[24] "packages.bib"
[25] "personal-book.Rmd"
[26] "personal-book.Rproj"
[27] "personal-book_files"
[28] "personal-bookdown_files"
[29] "README.md"
3.1.2 Rutas relativas
Son una abreviación de las rutas absolutas, basicamente sirve para no escribir la ruta bsoluta al momento de hacer alusión a un archivo.
Podemos hacer uso de estas a través de crear un proyecto en RStudio, o establecer un directorio de trabajo con la siguiente función. En mi caso estableceré como directorio de trabajo la ruta absoluta
/mnt/c/users/esteb/Desktop 2/Otros/web/personal-book
.
setwd("/mnt/c/users/esteb/Desktop 2/Otros/web/personal-book")
- En la seguiente sección haremos ejemplos prácticos sobre usos de rutas relativas.
3.2 Importación y exportación de archivos de texto plano.
- Que un archivo sea de texto plano significa que al momento de abrir un atchivo en un visor de texto (como el Bloc de Notas), se puede ver explícitamente una representación de sus filas, columnas o anidamientos.
- Para ello usaremos rutas relativas. Una herramienta potente para trabajar con estas, es usar la función
here
del packagehere
.
install.packages('here')
- Para ver mi directorio de trabajo usando el package
here
.
::here() here
[1] "D:/Otros/web/personal-book"
- Para obtener la ruta donde esta ubicada la carpeta
datasets
de mi directorio de trabajo.
::here('datasets') here
[1] "D:/Otros/web/personal-book/datasets"
- Para usar la ruta del archivo
datos.csv
ubicado en la carpetadatasets
de mi directorio de trabajo.
::here('datasets', 'datos.csv') here
[1] "D:/Otros/web/personal-book/datasets/datos.csv"
Notar que podemos escribir las carpetas y archivos separadas por comas para acceder a las distintas rutas que necesitemos.
En todas las funciones que usemos para importar y exportar archivos, debemos especificar la ruta del archivo como primer argumento. ¡Empezar a usar la función
here
puede ser una muy buena idea!.Para importar archivos a R usaremos los siguientes packages:
install.packages('readr') # Crea objetos del tipo tibble
install.packages('rio') # Crea objetos del tipo data.frame
install.packages('vroom') # Crea objetos del tipo tibble
install.packages('readxl') # Crea objetos del tipo tibble
install.packages('jsonlite') # Crea objetos del tipo lista
Sin embargo, también usaremos funciones que facilita la base de R (Retornan objetos del tipo
data.frame
), para ello podemos agregar a las funciones los siguientes argumentos:header
: Cuando esTRUE
, indicamos a la función que la primera línea del archivo corresponde a los nombres de las variables.stringsAsFactors
: Si esTRUE
se establecen las variables del tipocharacter
comofactor
.
3.2.1 Formato .csv
. (comma-separated values)
- Para importar un archivo
.csv
usamos:
# Opción 1
<- read.csv(here::here('datasets', 'datos.csv'))
datos # Importa un objeto del tipo data.frame
# Opción 2
<- readr::read_csv(here::here('datasets', 'datos.csv')) datos
Asegurarse de que el archivo tiene filas efectivamente separadas por comas, en caso de que estén separadas por ‘;’ usar
read.csv2
yreadr::read_csv2
respectivamente.
- Para exportar un archivo en formato
.csv
usamos:
# Opción 1
write.csv(objeto, here::here('datasets', 'nuevo-archivo.csv'))
# Opción 2
::write_csv(objeto, here::here('datasets', 'nuevo-archivo.csv'))
readr# Considera nombre de las filas
3.2.2 Formato .txt
(text)
- Para importar archivos con esta extensión podemos usar:
<- read.table(here::here('datasets', 'datos.txt'))
datos
<- readr::read_table(here::here('datasets', 'datos.txt')) datos
- Para exportar este tipo de formato usamos:
write.table(here::here(objeto, 'datasets', 'nuevo-archivo.txt'))
3.2.3 Formato .tsv
(tab separed values)
- Para importar este formato de archivo usaremos:
<- readr::read_tsv(here::here('datasets', 'datos.tsv')) datos
- Y para exportar a este formato de archivo usaremos:
::write_tsv(objeto, here::here('datasets', 'nuevo-archivo.tsv')) readr
3.2.4 Formato generalizado
- Es posible importar cualquier extensión de archivo de texto plano que represente una base de datos rectangular a R, se hace de la siguiente forma:
<- read.delim(here::here('datasets', 'datos.tsv'), sep = '\t')
datos <- read.delim(here::here('datasets', 'datos.csv'), sep = ';')
datos # Etc
3.2.5 Formato .json
(JavaScript object notation)
- Es una excepción, ya que no es una base de datos rectangular como las vistas anteriormente, sino que son listas anidadas. Importaremos este tipo de archivos de la siguiente forma:
<- jsonlite::read_json(here::here('datasets', 'datos.json')) datos
- Para exportar un archivo con expansión
.json
:
::write_json(objeto, here::here('datasets', 'nuevo-archivo.json')) jsonlite
3.3 Importación y exportación de archivos de texto no plano.
- En este formato de archivos, no podemos ver explícitamente una representación de la base de datos como un archivo
.xlsx
, en el cuál no podemos ver su contenido a no ser de que usemos Microsoft Excel.
3.3.1 Formato .RDS
- Este formato de archivos es nativo de R, por lo que la lectura y exportación a este formato es muy eficiente y recomendada.
- Para importar datos con esta extensión usamos:
# Opción 1
<- readRDS(here::here('datasets', 'datos.RDS'))
datos
# Opción 2
<- readr::read_rds(here::here('datasets', 'datos.RDS')) datos
- Para exportar este formato de archivos
# Opción 1
saveRDS(objeto, here::here('datasets', 'nuevo-archivo.RDS'))
# Comprimé el tamaño del archivo creado, pero tarda más
# Opción 2
::write_rds(objeto, here::here('datasets', 'nuevo-archivo.RDS'))
readr# No comprime el tamaño del archivo creado, pero tarda menos
3.3.2 Formato .xlsx
y .xls
.
- Para importar estos formatos de archivo provenientes de Excel, usaremos,
<- readxl::read_excel(here::here('datasets', 'datos.xlsx'))
datos <- readxl::read_excel(here::here('datasets', 'datos.xls')) datos
3.3.3 Comentario
- En vez de utilizar una ruta absoluta o relativa, podemos pegar un link directamente desde la web.
<- read.csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
datos <- readr::read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv') datos
- No funciona para archivos de Excel.
3.4 Bonus
- Si te preguntas sobre la existencia de alguna función que carge un archivo indistintamente de su extensión. ¡Claro que lo hay!.
- Por ejemplo la función
import
del packagerio
, acepta todos los formatos antes mencionados.
# install.packages('rio')
<- rio::import(here::here('datasets', 'datos.xlsx'))
datos <- rio::import(here::here('datasets', 'datos.csv'))
datos <- rio::import(here::here('datasets', 'datos.json')) datos
- Acepta links de internet, incluso para archivos Excel.
<- rio::import('https://covid.ourworldindata.org/data/owid-covid-data.xlsx') datos
3.5 Bonus 2
- Existe una función para cargar archivos de texto plano que representan bases bases de datos rectangulares, que es mucho más rápida que las funciones anteriormente vistas. Esta función es
vroom
del packagevroom
. - Acepta links de sitios web.
# install.packages('vroom')
<- vroom::vroom(here::here('datasets', 'datos.csv'))
datos <- vroom::vroom(here::here('datasets', 'datos.txt'))
datos <- vroom::vroom('https://covid.ourworldindata.org/data/owid-covid-data.csv') datos