Importar/Exportar en R

Importar y exportar archivos de datos con R

Muchos formatos de archivo se pueden leer en R. Acá miraremos algunos, como los archivos de texto (csv, txt), los applicaciones de hojas de calcul (xlsx, ods) y los archivos especificos de R.

1 Interactuar con el sistema de archivos

R funciona con el sistema de archivos a través de un “working directory”.

1.1 getwd, setwd y dir

La función getwd (get working directory) les permite saber en que carpeta están trabajando.

getwd()
[1] "/home/marius/Travail/Enseignement/2023_cursoBiodiversidadChile/cursoBiodata"

La función setwd les permite definir o cambiar de carpeta de trabajo:

setwd("/home/marius")

La función dir les permite obtener la lista de archivos en la carpeta de archivos actual.

dir()
 [1] "_site.yml"                      
 [2] "about.html"                     
 [3] "about.Rmd"                      
 [4] "act_R_intro_corr_cache"         
 [5] "act_R_intro_corr_files"         
 [6] "act_R_intro_corr.html"          
 [7] "act_R_intro_corr.Rmd"           
 [8] "act_R_intro_files"              
 [9] "act_R_intro.html"               
[10] "act_R_intro.Rmd"                
[11] "cursoBiodata.bib"               
[12] "cursoBiodata.bib.bak"           
[13] "cursoBiodata.bib.sav"           
[14] "cursoBiodata.Rproj"             
[15] "doc_DwC.html"                   
[16] "doc_DwC.Rmd"                    
[17] "doc_main_files"                 
[18] "doc_main.html"                  
[19] "doc_main.Rmd"                   
[20] "doc_R_buscarRelacionar.html"    
[21] "doc_R_buscarRelacionar.Rmd"     
[22] "doc_R_clases_modos.html"        
[23] "doc_R_clases_modos.Rmd"         
[24] "doc_R_import_export.Rmd"        
[25] "doc_R_structuraControl.Rmd"     
[26] "doc_spat.Rmd"                   
[27] "doc_SQL_consultas_avanzadas.Rmd"
[28] "doc_SQL_crear_bases.Rmd"        
[29] "doc_SQL_modificar_bases.Rmd"    
[30] "doc_SQL_simple.Rmd"             
[31] "doc_tax.Rmd"                    
[32] "docs"                           
[33] "download"                       
[34] "ejemplo_POO.R"                  
[35] "ejemplo_POO.Rmd"                
[36] "Fotos"                          
[37] "index.Rmd"                      
[38] "inst_software_linux.Rmd"        
[39] "inst_software_windows.Rmd"      
[40] "inst-paquetes_R.Rmd"            
[41] "inst-software_macOS.Rmd"        
[42] "participantes.Rmd"              
[43] "r_func"                         
[44] "site_libs"                      
[45] "sql_code"                       

1.2 “Caminos” de las carpetas

Los “caminos” o “direcciones” de las carpetas están codificados como cadenas de carácter en R, siguen las normas de direcciones de los sistemas UNIX:

En los proyectos, les aconsejo siempre utilizar “caminos relativos”, utilizando los signos . y .. para escribir las direcciones de los archivos. De está manera pueden mover la carpeta, y los codigos no deberían dejar de funcionar, si la relación entre las carpetas de codigos y datos quedan iguales en la nueva dirección de carpeta. En Rstudio, Session>Set working directory>To source file location les permite aplicar un setwd a la carpeta donde está el script de R.

2 “file encoding”

El “encoding” es una definición del set de caracteres utilizado en los archivos. Para evitar problemas de compatibilidad, les aconsejo utilizar siempre “UTF-8”, una norma unificada de “encoding” disponible en la mayoría de los sistemas.

En R eso se puede hacer con:

Sys.setlocale(locale = 'es_CL.UTF-8')

Este comando se puede escribir en el archivo .Rprofile para que sea leído antes de empezar cada sesión de R (ver https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf).

En Rstudio, vale la pena mirar como poner UTF8 como el encoding por defecto (https://community.rstudio.com/t/how-can-i-change-the-default-encoding-when-sourcing/14350)

3 Archivos de texto

3.1 Leer archivos de texto

La mayoría de los archivos que se utilizan son simplemente archivos de texto. Aunque tengan extensiones de archivos diferentes, los archivos txt, csv, o incluidó los scripts de R, SQL o python son todos simplemente archivos de texto, lo que les permite estar leído de manera nativa en todas las plataformas.

3.1.1 Función readlines

La función readLines es una de las funciones más básica para leer archivos de texto (existen unos métodos para abrir archivos como “conexiones” de manera todavía más básica, pero se necesitan raramente, los que quieren pueden mirar las funciones stdin, open, file etc). Lo que hace la función readLines es simplemente poner cada linea de un archivo de texto en un elemento de un vector de modo carácter.

readLines("../Datos/bog_chinga.csv")
[1] "\"UniMuestreo\",\"Especie\",\"abundancia\"" 
[2] "\"Bogotá\",\"Canis lupus\",3000"            
[3] "\"Bogotá\",\"Felis catus\",1000"            
[4] "\"Chingaza\",\"Tremarctos ornatus\",50"     
[5] "\"Chingaza\",\"Canis lupus\",100"           
[6] "\"Chingaza\",\"Odocoileus virginianus\",200"

3.1.2 Funciones read.table, read.csv etc

Las función read.table, read.csv, read.delim permiten leer archivos de texto que están estructurados como tablas (por ejemplo los archivos csv). Las principales diferencias entre esas funciones son los valores por defecto de sus argumentos (consultar el archivo de ayuda para mirar las opciones).

read.csv("../Datos/bog_chinga.csv")
  UniMuestreo                Especie abundancia
1      Bogotá            Canis lupus       3000
2      Bogotá            Felis catus       1000
3    Chingaza     Tremarctos ornatus         50
4    Chingaza            Canis lupus        100
5    Chingaza Odocoileus virginianus        200

3.2 Escribir archivos de texto con R

3.2.1 writeLines

Para escribir archivos de texto simples, se puede utilizar la función writeLines

miTexto<-c("Hello world","Me llamo Marius","y estoy escribiendo un texto en R")
writeLines(miTexto, con="../Resultados/miTexto.txt")

3.2.2 write.csv, write.table etc

Para guardar tablas que se pueden leer en otros programas, lo más seguro es guardar archivos csv (consultar el archivo de ayuda para mirar las opciones).

(letras_numeros<-data.frame(letras=LETTERS,numeros=1:length(LETTERS)))
   letras numeros
1       A       1
2       B       2
3       C       3
4       D       4
5       E       5
6       F       6
7       G       7
8       H       8
9       I       9
10      J      10
11      K      11
12      L      12
13      M      13
14      N      14
15      O      15
16      P      16
17      Q      17
18      R      18
19      S      19
20      T      20
21      U      21
22      V      22
23      W      23
24      X      24
25      Y      25
26      Z      26
write.csv(letras_numeros,file="../Resultados/let_num.csv")

4 Archivos xlsx

4.1 Lectura

Existen varios paquetes que permiten leer archivos de Microsoft Excel. Personalmente, utilizo principalmente openxlsx y su función read.xlsx.

library(openxlsx)
(programa<-read.xlsx("../Datos/Curso.xlsx",sheet="programa"))
         Día periodo                actividad
1      Lunes  mañana            Introdución,R
2      Lunes   tarde                        R
3     Martes  mañana                      SQL
4     Martes   tarde                      SQL
5  Miercoles  mañana                taxonomía
6  Miercoles   tarde                 espacial
7     Jueves  mañana Modelo de datos de Chile
8     Jueves   tarde Modelo de datos de Chile
9    Viernes  mañana            Git, paquetes
10   Viernes   tarde       Construir una base

Existen numerosas opciones de lectura (ver ayuda de la función read.xlsx).

Si queremos más posibilidades de edición, es posible cargar el archivo con la función loadWorkbook

wbCurso <- loadWorkbook("../Datos/Curso.xlsx")

Los nombres de pestañas están en:

names(wbCurso)
[1] "programa"    "estudiantes"

Con el archivo cargado, se puede utilizar esa variable para leer el archivo:

(estudiantes<-read.xlsx(wbCurso,sheet="estudiantes",colNames=F))
                              X1
1       Catalina Merino Yunnissi
2                  Diego Alarcón
3   Alejandra Jiménez Hernández 
4  Pamela Victoria Martínez Soto
5                   juan larrain
6        Gustavo Torres Mellado 
7    francisca gonzalez deramond
8         Victoria Arévalo Rocha
9       Juan José Ortiz Sandoval
10                  Karla García
11                Soledad Kremer
12         Valentina Perez Tello
13        javiera vergara vidal 
14 Francisca gonzalez Contreras 
15                Diego Gonzalez
16      Nicolás Ortega González 
17                  Felipe Durán
18   Juan Pablo Vicencio Segura 
19              Amparo Rodríguez
20     Angelica Villalobo López 
21               Caterina Vivero

4.2 Escritura

Para escribir un archivo xlsx, lo más practico es utilizar la función createWorkbook

mi_xlsx<-createWorkbook()
addWorksheet(mi_xlsx,"programa")
addWorksheet(mi_xlsx,"estudiantes")
addWorksheet(mi_xlsx,"num_estudiantes")

Después, podemos escribir los datos en cada “worksheet”

writeData(mi_xlsx,"programa",programa,rowNames = F)
writeData(mi_xlsx,"estudiantes",estudiantes,rowNames = F)
num_estu<-data.frame(num_estudiantes=nrow(estudiantes))
writeData(mi_xlsx,"num_estudiantes",num_estu,rowNames = F)

Finalmente, podemos exportar el archivo excel con:

saveWorkbook(mi_xlsx,file="../Resultados/mi_xlsx.xlsx", overwrite = T)

5 Archivos Open Documents

Si utilizan los archivos Open Documents (es una buena idea, desafortunadamente, muchas personas prefieren utilizar el formato xlsx de Microsoft), pueden utilizar el paquete readODS.

6 Archivos de datos para R

Exiten formatos de archivos de datos especificos para R: los archivos rds y RData.

Las diferencias entre esos archivos son:

6.1 RData

Los archivos RData se guardan así:

save(list=c("programa","estudiantes"),file="../Resultados/cursoBiodata.RData")

y se importan así:

(load(file="../Resultados/cursoBiodata.RData"))
[1] "programa"    "estudiantes"

Nota: poner una linea de codigo entre parentesis permite imprimir el resultado en la consola, en el caso de load, es muy util porque contiene la lista de las variables importadas.

6.2 RDS

Los archivos RDS se guardan así:

saveRDS(object=num_estu,file="../Resultados/nbStud.rds")

y se importan así:

nbStud<-readRDS("../Resultados/nbStud.rds")
nbStud==num_estu
     num_estudiantes
[1,]            TRUE