4.1 Importación y exportación de datos
Como ya se comentó en la Sección 1.8.1 podemos cargar y almacenar datos en ficheros (normalmente con extensión .RData o .rda) con las funciones load()
y save()
que emplean el formato por defecto de R (datos binarios comprimidos).
Por ejemplo:
<- load("datos/empleados.RData")
res # Devuelve el nombre de los objetos cargados en memoria res
## [1] "empleados"
En estos casos hay que tener en cuenta que, aunque es lo habitual, el nombre del conjunto de datos puede no coincidir con el nombre del archivo, incluso puede contener varios objetos2.
# Guardar
save(empleados, file = "datos/empleados_new.RData")
Además R es capaz de importar datos externos en casi cualquier formato (aunque puede requerir instalar paquetes adicionales), entre ellos:
Archivos de texto (con distintos formatos).
Archivos en otros formatos: Excel, SPSS…
Bases de datos relacionales: MySQL, SQLite, PostgreSQL…
Formatos web: HTML, XML, JSON…
A continuación se muestran algunos ejemplos empleando código. Adicionalmente en RStudio se puede emplear los submenús en File > Import Dataset (se previsualizará el resultado y escribirá el código por nosotros).
4.1.1 Lectura de archivos de texto
En R para leer archivos de texto se suele utilizar la función read.table()
:
read.table(file, header = FALSE, sep = "", dec = ".", ...)
Los principales argumentos son:
header
: indica si el fichero tiene cabecera (header = TRUE
) o no (header = FALSE
). Por defecto toma el valorheader = FALSE
.sep
: carácter separador de columnas que por defecto es un espacio en blanco (sep = ""
). Otras opciones serían:sep = ";"
si el separador es un “;”sep = "\t"
si el separador es una tabulación, etc.dec
: carácter utilizado en el fichero para los números decimales. Por defecto se establecedec = "."
. Si los decimales vienen dados por “,” se utilizadec = ","
Para más detalles y argumentos adicionales ver help(read.table)
.
Por ejemplo, supongamos que en el subdirectorio datos del directorio actual de trabajo está el fichero empleados.txt (con valores separados por espacios y con los los nombres de las columnas en la primera línea). Para leer este fichero y almacenarlo en un data.frame podemos emplear el siguiente código:
# Session > Set Working Directory > To Source...?
<- read.table(file = "datos/empleados.txt", header = TRUE)
datos # head(datos)
str(datos)
## 'data.frame': 474 obs. of 10 variables:
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ sexo : chr "Hombre" "Hombre" "Mujer" "Mujer" ...
## $ fechnac : chr "2/3/1952" "5/23/1958" "7/26/1929" "4/15/1947" ...
## $ educ : int 15 16 12 8 15 15 15 12 15 12 ...
## $ catlab : chr "Directivo" "Administrativo" "Administrativo" "Administrativo" ...
## $ salario : num 57000 40200 21450 21900 45000 ...
## $ salini : int 27000 18750 12000 13200 21000 13500 18750 9750 12750 13500 ...
## $ tiempemp: int 98 98 98 98 98 98 98 98 98 98 ...
## $ expprev : int 144 36 381 190 138 67 114 0 115 244 ...
## $ minoria : chr "No" "No" "No" "No" ...
Si el fichero estuviese en el directorio c:\datos bastaría con especificar
file = "c:/datos/empleados.txt"
.
Además están disponibles otras funciones con valores por defecto de los parámetros adecuados para otras situaciones.
Por ejemplo, para ficheros separados por tabuladores se puede utilizar read.delim()
o read.delim2()
(ver también la Sección 4.1.3):
read.delim(file, header = TRUE, sep = "\t", dec = ".")
read.delim2(file, header = TRUE, sep = "\t", dec = ",")
Para leer archivos de texto en distintos formatos también se puede emplear el paquete readr
(colección tidyverse
), para lo que se recomienda
consultar el Capítulo 11 del libro R for Data Science.
4.1.2 Importación desde SPSS
Podemos importar ficheros de datos en formato SPSS (extensión .sav) empleando la función read.spss()
de la librería foreign
.
Por ejemplo:
library(foreign)
<- read.spss(file = "datos/Employee data.sav", to.data.frame = TRUE)
datos # head(datos)
str(datos)
## 'data.frame': 474 obs. of 10 variables:
## $ id : num 1 2 3 4 5 6 7 8 9 10 ...
## $ sexo : Factor w/ 2 levels "Hombre","Mujer": 1 1 2 2 1 1 1 2 2 2 ...
## $ fechnac : num 1.17e+10 1.19e+10 1.09e+10 1.15e+10 1.17e+10 ...
## $ educ : Factor w/ 10 levels "8","12","14",..: 4 5 2 1 4 4 4 2 4 2 ...
## $ catlab : Factor w/ 3 levels "Administrativo",..: 3 1 1 1 1 1 1 1 1 1 ...
## $ salario : Factor w/ 221 levels "15750","15900",..: 179 137 28 31 150 101 121 31 71 45 ...
## $ salini : Factor w/ 90 levels "9000","9750",..: 60 42 13 21 48 23 42 2 18 23 ...
## $ tiempemp: Factor w/ 36 levels "63","64","65",..: 36 36 36 36 36 36 36 36 36 36 ...
## $ expprev : Factor w/ 208 levels "Ausente","10",..: 38 131 139 64 34 181 13 1 14 91 ...
## $ minoria : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "variable.labels")= Named chr [1:10] "Código de empleado" "Sexo" "Fecha de nacimiento" "Nivel educativo" ...
## ..- attr(*, "names")= chr [1:10] "id" "sexo" "fechnac" "educ" ...
## - attr(*, "codepage")= int 1252
También se puede emplear la función spss.get()
del paquete Hmisc
, lo cual puede ser recomendable si alguna de las variables contiene fechas.
4.1.3 Importación desde Excel
Se pueden leer fichero de Excel (con extensión .xlsx) utilizando por ejemplo los paquetes openxlsx
, readxl
(colección tidyverse
), XLConnect
o
RODBC
(este paquete se empleará más adelante para acceder a bases de datos),
entre otros.
Sin embargo, un procedimiento sencillo consiste en exportar los datos desde Excel a un archivo de texto separado por tabuladores (extensión .csv). Por ejemplo, supongamos que queremos leer el fichero coches.xls:
Desde Excel se selecciona el menú
Archivo -> Guardar como -> Guardar como
y enTipo
se escoge la opción de archivo CSV. De esta forma se guardarán los datos en el archivo coches.csv.El fichero coches.csv es un fichero de texto plano (se puede editar con Notepad), con cabecera, las columnas separadas por “;” y siendo “,” el carácter decimal.
Por lo tanto, la lectura de este fichero se puede hacer con:
<- read.table("coches.csv", header = TRUE, sep = ";", dec = ",") datos
Otra posibilidad es utilizar la función read.csv2
, que es
una adaptación de la función general read.table
con las siguientes
opciones:
read.csv2(file, header = TRUE, sep = ";", dec = ",")
Por lo tanto, la lectura del fichero coches.csv se puede hacer de modo más directo con:
<- read.csv2("coches.csv") datos
4.1.4 Exportación de datos
Puede ser de interés la exportación de datos para que puedan leídos con otros programas.
Para ello, se puede emplear la función write.table()
.
Esta función es similar, pero operando en sentido inverso, a read.table()
(Sección 4.1.1).
Veamos un ejemplo:
<- c("A", "B", "C")
tipo <- c(120.34, 99.45, 115.67)
longitud <- data.frame(tipo, longitud)
datos datos
## tipo longitud
## 1 A 120.34
## 2 B 99.45
## 3 C 115.67
Para guardar el data.frame datos
en un fichero de texto se
puede utilizar:
write.table(datos, file = "datos.txt")
Otra posibilidad es utilizar la función:
write.csv2(datos, file = "datos.csv")
y se creará el fichero datos.csv que se puede abrir directamente con Excel.
Para almacenar un único objeto de forma que se pueda cargar posteriormente especificando el nombre, se pueden emplear las funciones
saveRDS()
yreadRDS()
.↩︎