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.
R funciona con el sistema de archivos a través de un “working directory”.
getwd, setwd y dirLa 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"
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:
/. designa la carpeta actual.. designa la carpeta superiorEn 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.
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)
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.
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"
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
writeLinesPara 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")
write.csv, write.table etcPara 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")
Existen varios paquetes que permiten leer archivos de Microsoft Excel.
Personalmente, utilizo principalmente openxlsx y su función read.xlsx.
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
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)
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.
Exiten formatos de archivos de datos especificos para R: los archivos rds y RData.
Las diferencias entre esos archivos son:
Los archivos RData se guardan así:
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.
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