2.5 Lectura de datos externos

Por supuesto, no nos vamos a limitar a trabajar con datos de ejemplo provistos por R: queremos utilizar también nuestras propias tablas. En R hay decenas de maneras de importar datos tabulares desde distintas fuentes (Excel, bases de datos, SPSS, etc.) pero la más habitual consiste en leer ficheros de texto con la función read.table.

Existen muchas variantes de ficheros de texto: csv, ficheros separados con tabulador, con y sin encabezamientos, con distintos códigos para representar los nulos, etc. La función read.table es muy flexible y tiene muchos parámetros, casi demasiados, para adaptarse a la mayor parte de ellos10.

Antes de comenzar a utilizarla, sin embargo, es necesaria una digresión acerca de directorios y directorios de trabajo. El directorio de trabajo es aquel en el que R busca y escribe ficheros por defecto. Las funciones getwd y setwd permiten, respectivamente, averiguar cuál es y cambiarlo si procede. De todos modos, la mejor manera de especificar el directorio de trabajo en RStudio es usando los menús: Files > More > Set as working directory.

getwd()         
setwd("..")       # "sube" al directorio padre del actual
setwd("mi_proyecto/src")      # ruta relativa
setwd("c:/users/yo/proyecto") # ruta absoluta en Windows
setwd("/home/yo/proyecto")    # ruta absoluta en Linux y otros
dir()             # contenidos del directorio "de trabajo"

Una llamada típica a read.table para leer un fichero es así:

datos <- read.table("data_dir/mi_fichero.csv", sep = "\t", header = TRUE)

Examinénmosla:

  • datos es el nombre de la tabla que recibirá la información leída por read.table; de no hacerse la asignación, R se limitará a imprimirlos en la consola.
  • "data_dir/mi_fichero.csv" (¡entrecomillado!) es la ruta del fichero de interés. Se trata de una ruta relativa al directorio de trabajo, que se supone que contiene el subdirectorio data_dir y, dentro de él, el fichero mi_fichero.csv.
  • sep = "\t" indica que los campos del fichero están separados por tabuladores (sí, el tabulador es \t). Muchos ficheros tienen campos separados por, además del tabulador, caracteres tales como ,, ;, | u otros. Es necesario indicárselo a R y la manera de averiguar qué separador usa un fichero, si es que no se sabe, es abriéndolo previamente con un editor de texto decente11.
  • header = TRUE indica que la primera fila del fichero contiene los nombres de las columnas. Si olvidas especificarlo y la primera fila del fichero contiene efectivamente el nombre de las columnas, R interpretará estas, erróneamente, como datos.

Con una expresión similar a esa, tal vez cambiando el separador, se leen la mayoría de los ficheros de texto habituales. Otras opciones de las muchas que tiene read.table que pueden ser útiles en determinadas ocasiones son:

  • dec, para indicar el separador de decimales. Por defecto es ., pero en ocasiones hay que cambiarlo a dec = "," para que interprete correctamente, p.e., el antiguo estándar español (p.e., 67,56 en lugar de 67.56).
  • quote, que indica qué caracter se usa para acotar campos de texto. En algunas ocasiones aparecen campos de texto que contienen apóstrofes (p.e., calle O’Donnell) y la carga de datos puede fracasar de no indicarse quote = "". Esta expresión desactiva el papel especial de acotación de campos de texto que por defecto tienen las comillas.

Los siguientes ejercicios (y muchos más a lo largo de libro) hacen referencia a conjuntos de datos disponibles en https://bit.ly/2qS7DvO. Descarga ese fichero y descomprímelo en alguna carpeta.

Lee el fichero paro.csv usando la función read.table. Comprueba que está correctamente importado usando head, tail, nrow, summary, etc. Para leer la tabla necesitarás leer con cierto detenimiento ?read.table.

Repite el ejercicio anterior eliminando la opción header = TRUE. Examina el resultado y comprueba que, efectivamente, los datos no se han cargado correctamente.

Lee algún fichero de datos de tu interés y repite el ejercicio anterior.

En read.table y sus derivados puedes indicar, además de ficheros disponibles en el disco duro, la URL de uno disponible en internet. Prueba a leer directamente el fichero disponible en https://datanalytics.com/uploads/datos_treemap.txt. Nota: es un fichero de texto separado por tabuladores y con nombres de columna.

Alternativamente, si quieres leer un fichero remoto, puedes descargarlo directamente desde R. Consulta la ayuda de download.file para bajarte al disco duro el fichero del ejercicio anterior y leerlo después.


  1. Existen versiones de read.table, como read.csv o read.csv2, que son la misma función pero con valores por defecto distintos para poder leer (a menudo) directamente ficheros con formato csv y otros. Pero, en el fondo, no dejan de ser alias de read.table.

  2. Notepad no es un editor de texto decente.