Logo de Torre de Babel
Portada Libros Diseño web Artículos Glosario RSS
Buscar

Intercambio de datos entre Excel y R (III) - El paquete xlsx

En las dos entregas anteriores sobre este tema se han descrito procedimientos dirigidos a intercambiar información entre Excel y R, en el primer caso usando el portapapeles y en el segundo mediante archivos CSV/DIF como intermediarios. El primer enfoque es adecuado cuando el usuario de R y Excel es la misma persona y usa ambas aplicaciones en el mismo equipo, mientras que el segundo permite compartir información entre distintos equipos y usuarios, por ejemplo enviando los archivos a un servidor compartido o por correo electrónico.

A pesar de la sencillez del proceso, descrito en la segunda entrega, no todos los usuarios de Excel están preparados (o dispuestos) a exportar sus datos a CSV para enviárselos a un tercero o a importar datos de un archivo cuyo formato no conoce y que, a priori, podría darle problemas, por ejemplo si la configuración regional de Excel altera los separadores de decimales y miles. Afortunadamente R, como herramienta de código abierto que es, dispone de infinidad de paquetes para todo tipo de tareas, entre ellas la lectura y escritura directa de hojas de cálculo en formato XLSX (el usado por Excel desde las versión 2007).

En CRAN (el repositorio de paquetes R) podemos encontrar múltiples paquetes para trabajar con hojas de cálculo Excel desde R. Uno de ellos es el paquete xlsx, con el que también puede trabajar con hojas de versiones previas de Excel. Para instalar este paquete no tenemos más que facilitar su nombre a install.packages desde la consola de R. Si la configuración del repositorio es correcta, se descargará el paquete y también sus dependencias, quedando instalados y listos para usar. Las funciones indicadas a continuación dependen de que se haya cargado el paquete en la actual sesión de R, para lo cual ejecutaremos library(xlsx) al inicio.

Si la tarea a realizar consiste en enviar a una hoja de cálculo Excel la información que tenemos almacenada en un data.frame de R (u otra estructura de datos), la función a usar es write.xlsx. Los parámetros imprescindibles son dos: el conjunto de datos a escribir y el nombre del archivo en que reside la hoja de cálculo (argumento filename. Además también son de uso habitual los parámetros siguientes:

  • sheetName: Nombre de la hoja del libro en que se introducirán los datos. Ha de ser un nombre único, no debe haber otra hoja con ese nombre en el libro Excel en caso de que estén añadiéndose datos a un libro existente. Por defecto toma el valor Sheet1.
  • append: Por defecto toma el valor FALSE, provocando que la función cree un libro con el nombre indicado por filename eliminándolo si ya existiese. Si es TRUE el libro debe existir y al mismo se añadirá una hoja con los nuevos datos.
  • col.names y row.names: Determinan si se escribirán en la hoja los nombres asociados a las columnas y las filas del data.frame. Por defecto ambos parámetros toman el valor TRUE.
En la imagen siguiente puede verse un ejemplo de uso de esta función. En él se agregan a un libro existente tres nuevas hojas, con los nombres de tres meses, y datos hipotéticamente correspondientes a las ventas diarias. En la imagen de más abajo puede verse el libro tras abrirlo en Excel.

La función complementaria a la anterior, mediante la que podemos leer desde R información almacenada en un libro Excel sin necesidad de tener instalada esta aplicación, es read.xlsx. El primer argumento será en este caso el nombre del archivo donde está almacenada la información, siendo obligatorio indicar un número de hoja con el parámetro sheetIndex o bien su nombre con el parámetro sheetName. Sin más parámetros la función leerá todo el contenido de la hoja indicada, generará un data.frame incluyendo títulos de columnas y lo devolverá. En caso de que nos interese leer un conjunto concreto de celdillas, no la hoja completa, recurriremos a los parámetros colIndex y rowIndex para especificar qué columnas y qué filas han de recuperarse. Estas no tienen necesariamente que ser contiguas. En el ejemplo de la imagen siguiente se recupera la primera fila y las filas 23 a 32.

Por defecto la función read.xlsx evaluará las fórmulas que pudieran existir en la hoja de cálculo, almacenando en el data.frame el resultado que produzcan. Dando el valor TRUE al parámetro keepFormulas se anulará la evaluación, obteniendo en su lugar el texto de la fórmula.

Con esta tercera entrega concluyo, al menos por el momento, el tema de la importación/exportación de datos entre R y Excel.


Publicado el 7/4/2013

Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web