InicioManipulaci贸n de datosLeer Excel en R

Leer Excel en R

Leer hojas de Excel en R

Excel es una hoja de c谩lculo desarrollada por Microsoft, que permite administrar los datos de una manera muy simple. Hasta 2007, XLS era la extensi贸n de archivo principal. Sin embargo, en la versi贸n de 2007 se introdujo la extensi贸n XLSX (basada en XML), para convertirse en el formato de libro de Excel predeterminado. En este tutorial aprender谩s a leer un Excel en R y RStudio con varios paquetes.

驴C贸mo importar archivos Excel en R?

Para trabajar con datos de Excel en R deber谩s usar un paquete desarrollado para tal fin. Hay varias opciones, pero los mejores paquetes para leer archivos de Excel podr铆an ser openxlsx y readxl, ya que no dependen de JAVA (a diferencia de los paquetes xlsx y XLConnect) ni de Perl (como el paquete gdata).

Ten en cuenta que las dependencias externas pueden causar errores al cargar los paquetes, pero para grandes conjuntos de datos deber铆an ser m谩s r谩pidos que las otras alternativas.

Importar datos de Excel en RStudio desde el men煤

Si est谩s usando RStudio puedes ir a FileImport DatasetFrom Excel.... Luego, selecciona tu archivo de Excel d谩ndole a Browse... y personaliza la salida (el nombre de la variable, la hoja, el rango de celdas, 鈥). Tambi茅n puedes ver una vista previa del c贸digo que se ejecutar谩 de fondo y de los datos que se cargar谩n:

Importar archivo Excel en RStudio
Leer archivo Excel XLS, XLSX en RStudio con el men煤
Ten en cuenta que para utilizar este procedimiento necesitas tener instalado el paquete readxl.

Leer XLSX sin JAVA en R: readxl y openxlsx

El paquete readxl

El paquete readxl forma parte del paquete tidyverse, creado por Hadley Wickham (cient铆fico jefe en RStudio) y su equipo. Este paquete soporta XLS via la librer铆a de C libxls y archivos XLSX via el paquete RapidXML de C++, sin la necesidad de utilizar dependencias externas.

El paquete proporciona algunos archivos Excel (XLS y XLSX) de muestra almacenados en la carpeta de instalaci贸n del paquete, por lo que con el objetivo de ofrecer un ejemplo reproducible, en los siguientes ejemplos vamos a utilizar el archivo clippy.xlsx, cuya primera hoja es la siguiente:

XLSX de ejemplo en R

Para cargar la ruta del archivo Excel de muestra, puedes utilizar la funci贸n readxl_example. Una vez cargado, o una vez que tengas la ruta de tu propio archivo Excel, puedes usar la funci贸n excel_sheets para obtener los nombres de las hojas del archivo Excel, en caso de que lo necesites.

# install.packages("readxl")
library(readxl)

# Obtener la ruta de un archivo XLSX de ejemplo del paquete
ruta_archivo <- readxl_example("clippy.xlsx")

# Comprobar los nombres de las hojas del archivo
excel_sheets(ruta_archivo) # "list-column" "two-row-header"

La funci贸n gen茅rica del paquete para leer archivos de Excel en R es la funci贸n read_excel, que ‘adivina’ el tipo de archivo (XLS o XLSX) seg煤n la extensi贸n del archivo y el archivo en s铆, en ese orden.

read_excel(ruta_archivo)
# A tibble: 4 x 2
  name                 value    
  <chr>                <chr>    
1 Name                 Clippy   
2 Species              paperclip
3 Approx date of death 39083    
4 Weight in grams      0.9 

El argumento sheet permite especificar la hoja que quieres cargar, pasando su nombre o el n煤mero correspondiente de la pesta帽a. Ten en cuenta que, por defecto, la funci贸n carga la primera hoja de Excel.

# Seleccionamos la otra hoja del Excel
read_excel(ruta_archivo, sheet = "two-row-header")
read_excel(ruta_archivo, sheet = 2) # Equivalente
# A tibble: 2 x 4
  name       species              death                 weight    
  <chr>      <chr>                <chr>                 <chr>     
1 (at birth) (office supply type) (date is approximate) (in grams)
2 Clippy     paperclip            39083                 0.9 

Tambi茅n puedes saltar filas con el argumento skip de la funci贸n:

# Saltar la primera fila
read_excel(ruta_archivo, skip = 1)
# A tibble: 3 x 2
  Name                 Clippy   
  <chr>                <chr>    
1 Species              paperclip
2 Approx date of death 39083    
3 Weight in grams      0.9  

Ten en cuenta que tambi茅n puedes especificar un rango de celdas con el argumento range. En este caso, el argumento skip no se tendr谩 en cuenta si lo especificas.

read_excel(ruta_archivo, range = "B1:B5")
# A tibble: 4 x 1
  value    
  <chr>    
1 Clippy   
2 paperclip
3 39083    
4 0.9 

Adem谩s, si quieres evitar leer los nombres de las columnas, puedes establecer el argumento col_names como FALSE:

read_excel(ruta_archivo, col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
                  ...1      ...2
1                 name     value
2                 Name    Clippy
3              Species paperclip
4 Approx date of death     39083
5      Weight in grams       0.9

Sin embargo, es posible que hayas notado que la salida es de clase tibble (un tipo moderno de data frame). Si quieres que la salida sea de clase data.frame, deber谩s usar la funci贸n as.data.frame de la siguiente manera:

data <- read_excel(ruta_archivo, skip = 1)
as.data.frame(data)
                  Name    Clippy
1              Species paperclip
2 Approx date of death     39083
3      Weight in grams       0.9

Recuerda que la funci贸n read_excel ‘adivina’ la extensi贸n de archivo. No obstante, si conoces la extensi贸n del archivo que vas a leer, puedes usar la funci贸n correspondiente de las siguientes para evitar ese proceso de ‘adivinaci贸n’:

# Si conoces la extensi贸n del archivo
# usa una de estas dos funciones

# Para archivos XLS
read_xls()

# Para archivos XLSX
read_xlsx()

El paquete openxlsx

El paquete openxlsx usa Rcpp y, como no depende de JAVA, es una alternativa interesante al paquete readxl para leer un archivos Excel en R. Las diferencias respecto al paquete anterior son que la salida es de clase data.frame por defecto en lugar de tibble y que su uso principal no es solo la importaci贸n de archivos de Excel, ya que tambi茅n proporciona una amplia variedad de funciones para escribir, dise帽ar y editar archivos de Excel.

La funci贸n para leer archivos XLSX se llama read.xlsx:

# install.packages("openxlsx")
library(openxlsx)

read.xlsx(ruta_archivo)
                  name     value
1                 Name    Clippy
2              Species paperclip
3 Approx date of death     39083
4      Weight in grams       0.9

Como en la funci贸n del paquete anterior, existen varios argumentos que puedes personalizar, como sheet, skip o colNames. Si quieres seleccionar celdas espec铆ficas puedes usar los argumentos rows y cols. Recuerda escribir ?read.xlsx o help(read.xlsx) para obtener informaci贸n adicional.

read.xlsx(ruta_archivo, cols = 1:2, rows = 2:3)
     Name    Clippy
1 Species paperclip

El paquete xlsx

Aunque este paquete requiere que JAVA est茅 instalado en tu ordenador, es muy popular. Las funciones principales para importar archivos de Excel son read.xlsx y read.xlsx2. El segundo tiene ligeras diferencias en los argumentos predeterminados y hace m谩s trabajo en JAVA, logrando un mejor rendimiento.

# install.packages("xlsx")
library(xlsx)

read.xlsx(ruta_archivo)
read.xlsx2(ruta_archivo)

Puedes personalizar diversos argumentos, como sheetIndex, sheetName, header, rowIndex, colIndex, entre otros. Ejecuta ?read.xlsx o help(read.xlsx) para obtener detalles adicionales.

El paquete XLConnect

Una alternativa al paquete xlsx es XLConnect, que permite escribir, leer y dar formato a archivos de Excel. Para leer un Excel en R puedes usar la funci贸n readWorksheetFromFile como sigue. Recomendamos ejecutar ??XLConnect para buscar informaci贸n adicional de los argumentos de cada funci贸n del paquete.

# install.packages("XLConnect")
library(XLConnect)

data <- readWorksheetFromFile(ruta_archivo, sheet = "list-column",
                              startRow = 1, endRow = 5,
                              startCol = 1, endCol = 2)

En caso de que quieras cargar varias hojas, se recomienda utilizar la funci贸n loadWorkbook y luego cargar cada hoja con la funci贸n readWorksheet:

load <- loadWorkbook(ruta_archivo)

data <- readWorksheet(load, sheet = "list-column",
                      startRow = 1, endRow = 5,
                      startCol = 1, endCol = 2)

data2 <- readWorksheet(load, sheet = "two-row-header",
                       startRow = 1, endRow = 3,
                       startCol = 1, endCol = 4)

Adem谩s, este paquete proporciona una funci贸n para cargar regiones con nombre de Excel. An谩logo al ejemplo anterior, puedes importar solo una regi贸n con readNamedRegionFromFile, especificando el nombre del archivo (si el archivo est谩 en tu directorio de trabajo) o la ruta del archivo y el nombre de la regi贸n en otro caso.

data <- readNamedRegionFromFile(file, # Ruta del archivo
                                name, # Nombre de la regi贸n
                                ...)  # Argumentos de readNamedRegion()

Si quieres cargar varias regiones con nombre, puedes cargar el libro de Excel con la funci贸n loadWorkbook y luego importar cada regi贸n con la funci贸n readNamedRegion.

cargar <- loadWorkbook(ruta_archivo)

data <- readNamedRegion(cargar, name_Region_1, ...)
data2 <- readNamedRegion(cargar, name_Region_2, ...)

Cabe mencionar que si tienes problemas con los paquetes que requieren JAVA, puedes obtener y establecer la ruta de JAVA en R con los siguientes c贸digos:

# Imprime la ruta de JAVA en R
Sys.getenv("JAVA_HOME")

# Establece la ruta de JAVA
Sys.setenv(JAVA_HOME = "path_to_jre_java_folder")

Ten en cuenta que deber谩s especificar la ruta a la carpeta jre dentro de la carpeta Java de tu ordenador, que por lo general se encontrar谩 en Archivos de Programa.

Convertir archivos XLSX a CSV en R

Por 煤ltimo, tambi茅n podr铆as convertir tus archivos de Excel a formato CSV y leer el archivo CSV en R. Para este prop贸sito, puedes usar la funci贸n convert del paquete rio. Una alternativa ser铆a guardar directamente el archivo de Excel como CSV con el men煤 de Microsoft Excel.

# install.packages("rio")
library(rio)

convert(ruta_archivo, "file.csv")