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 package here.
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::here('datasets')
[1] "D:/Otros/web/personal-book/datasets"
  • Para usar la ruta del archivo datos.csv ubicado en la carpeta datasets de mi directorio de trabajo.
here::here('datasets', 'datos.csv')
[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 es TRUE, indicamos a la función que la primera línea del archivo corresponde a los nombres de las variables.
    • stringsAsFactors: Si es TRUE se establecen las variables del tipo character como factor.

3.2.1 Formato .csv. (comma-separated values)

  • Para importar un archivo .csv usamos:
# Opción 1
datos <- read.csv(here::here('datasets', 'datos.csv'))
# Importa un objeto del tipo data.frame

# Opción 2
datos <- readr::read_csv(here::here('datasets', 'datos.csv'))

Asegurarse de que el archivo tiene filas efectivamente separadas por comas, en caso de que estén separadas por ‘;’ usar read.csv2 y readr::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
readr::write_csv(objeto, here::here('datasets', 'nuevo-archivo.csv'))
# Considera nombre de las filas

3.2.2 Formato .txt (text)

  • Para importar archivos con esta extensión podemos usar:
datos <- read.table(here::here('datasets', 'datos.txt'))

datos <- readr::read_table(here::here('datasets', 'datos.txt'))
  • 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:
datos <- readr::read_tsv(here::here('datasets', 'datos.tsv'))
  • Y para exportar a este formato de archivo usaremos:
readr::write_tsv(objeto, here::here('datasets', 'nuevo-archivo.tsv'))

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:
datos <- read.delim(here::here('datasets', 'datos.tsv'), sep = '\t')
datos <- read.delim(here::here('datasets', 'datos.csv'), sep = ';')
# 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:
datos <- jsonlite::read_json(here::here('datasets', 'datos.json'))
  • Para exportar un archivo con expansión .json:
jsonlite::write_json(objeto, here::here('datasets', 'nuevo-archivo.json'))

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
datos <- readRDS(here::here('datasets', 'datos.RDS'))

# Opción 2
datos <- readr::read_rds(here::here('datasets', 'datos.RDS'))
  • 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
readr::write_rds(objeto, here::here('datasets', 'nuevo-archivo.RDS'))
# 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,
datos <- readxl::read_excel(here::here('datasets', 'datos.xlsx'))
datos <- readxl::read_excel(here::here('datasets', 'datos.xls'))

3.3.3 Comentario

  • En vez de utilizar una ruta absoluta o relativa, podemos pegar un link directamente desde la web.
datos <- read.csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
datos <- readr::read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
  • 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 package rio, acepta todos los formatos antes mencionados.
# install.packages('rio')

datos <- rio::import(here::here('datasets', 'datos.xlsx'))
datos <- rio::import(here::here('datasets', 'datos.csv'))
datos <- rio::import(here::here('datasets', 'datos.json'))
  • Acepta links de internet, incluso para archivos Excel.
datos <- rio::import('https://covid.ourworldindata.org/data/owid-covid-data.xlsx')

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 package vroom.
  • Acepta links de sitios web.
# install.packages('vroom')

datos <- 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')