Importación de archivos de Excel a R, xlsx o xls

91

Por favor, ¿alguien puede ayudarme sobre la mejor manera de importar un archivo de Excel 2007 (.xlsx) en R. He probado varios métodos y ninguno parece funcionar? He actualizado a 2.13.1, Windows XP, xlsx 0.3.0, no sé por qué sigue apareciendo el error. Lo intenté:

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx","DNA_Tag_Numbers")

O

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)

pero me sale el error:

 Error in .jnew("java/io/FileInputStream", file) : 
  java.io.FileNotFoundException: C:\AB_DNA_Tag_Numbers.xlsx (The system cannot find the file specified)

Gracias.

nolyugo
fuente
4
¿Cuántas veces haces esto? Si es solo una vez, casi siempre es mejor usar Excel para exportar a un formato más abierto, como .csv.
Ari B. Friedman
gsk3: Sí, o Google Docs, que ha tenido soporte de importación de Excel 2007 desde '09: google.com/support/forum/p/Google%20Docs/… (Esperemos que a estas alturas funcione bien).
Benjamin Atkin
6
¿Qué versión de R es esta? ¿Qué sistema operativo? ¿Qué versión de read.xlsx? ¿Ha leído la guía de publicación? </ripleybot>
Spacedman
2
¿Puede explicar en qué se diferencia esta pregunta de stackoverflow.com/questions/6099243/…
Chase
9
¿Ha comprobado que R es capaz de encontrar el archivo, por ejemplo file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Respuestas:

104

Para una solución que está libre de dependencias externas complicadas *, ahora hay readxl:

El paquete readxl facilita la extracción de datos de Excel y los lleva a R. En comparación con muchos de los paquetes existentes (por ejemplo, gdata, xlsx, xlsReadWrite), readxl no tiene dependencias externas, por lo que es fácil de instalar y usar en todos los sistemas operativos. Está diseñado para trabajar con datos tabulares almacenados en una sola hoja.

Readxl admite tanto el formato .xls heredado como el formato .xlsx moderno basado en xml. El soporte .xls es posible con la biblioteca libxls C, que abstrae muchas de las complejidades del formato binario subyacente. Para analizar .xlsx, usamos la biblioteca RapidXML C ++.

Se puede instalar así:

install.packages("readxl") # CRAN version

o

devtools::install_github("hadley/readxl") # development version

Uso

library(readxl)

# read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")

# Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet = "data")
read_excel("my-spreadsheet.xls", sheet = 2)

# If NAs are represented by something other than blank cells,
# set the na argument
read_excel("my-spreadsheet.xls", na = "NA")

* no es estrictamente cierto, requiere el Rcpppaquete , que a su vez requiere Rtools (para Windows) o Xcode (para OSX), que son dependencias externas a R. Pero no requieren ninguna manipulación con rutas, etc., así que eso es un ventaja sobre las dependencias de Java y Perl.

Actualización Ahora existe el paquete rexcel . Esto promete obtener formato de Excel, funciones y muchos otros tipos de información del archivo de Excel y en R.

Ben
fuente
35

También puede probar el paquete XLConnect. He tenido mejor suerte con él que xlsx (además, también puede leer archivos .xls).

library(XLConnect)
theData <- readWorksheet(loadWorkbook("C:/AB_DNA_Tag_Numbers.xlsx"),sheet=1)

Además, si tiene problemas porque no se encuentra su archivo, intente seleccionarlo con file.choose ().

Becarios Ian
fuente
7
En lugar de readWorksheet(loadWorkbook(...))hacerlo, puede hacer lo mismo de forma un poco más sucinta con readWorksheetFromFile(...).
Hugh
Esto funcionó en una de mis hojas problemáticas que read.xlsx se bloqueó con "java.lang.IllegalArgumentException: el índice de celda debe ser> = 0"
ski_squaw
23

Definitivamente probaría la read.xlsfunción en el gdatapaquete, que es considerablemente más madura que el xlsxpaquete. Puede requerir Perl ...

Ben Bolker
fuente
21

Actualizar

Como la respuesta a continuación ahora está algo desactualizada, solo llamaría la atención sobre el paquete readxl . Si la hoja de Excel está bien formateada / colocada , ahora usaría readxl para leer el libro de trabajo. Si las hojas están mal formateadas / colocadas, todavía exportaría a CSV y luego manejaría los problemas en R, ya sea a través read.csv()o simplemente antiguo readLines().

Original

Mi forma preferida es guardar hojas de Excel individuales en archivos de valores separados por comas (CSV). En Windows, estos archivos están asociados con Excel para que no pierda la "función" de doble clic para abrir en Excel.

Los archivos CSV se pueden leer en R usando read.csv(), o, si está en una ubicación o usando una computadora configurada con algunas configuraciones europeas (donde ,se usa como el lugar decimal), usando read.csv2().

Estas funciones tienen valores predeterminados sensibles que facilitan la lectura de archivos con el formato adecuado. Simplemente mantenga las etiquetas de las muestras o variables en la primera fila o columna.

Los beneficios adicionales de almacenar archivos en CSV son que, dado que los archivos son de texto sin formato, se pueden pasar muy fácilmente y puede estar seguro de que se abrirán en cualquier lugar; no se necesita Excel para ver o editar los datos.

Gavin Simpson
fuente
6
El csv no ayudaría ya que el libro de trabajo contiene varias hojas de trabajo y cada una tiene hasta 100k filas. Gracias
nolyugo
7
Dije que guarde las hojas individuales como archivos CSV, ya que son texto sin formato, el tamaño de las hojas de trabajo es irrelevante. Si insiste en trabajar con libros de Excel, las opciones disponibles para leer los datos en R se vuelven mucho más complejas; consulte los paquetes RODBC, RDCOM para conocer las alternativas. Finalmente, si está seguro de que ha seguido las instrucciones de uso read.xlsx() y tiene las últimas versiones de ese paquete y R, envíe un correo electrónico al encargado del paquete para informar un error potencial.
Gavin Simpson
Realmente depende de los datos y el nivel de interoperabilidad que requiera entre sistemas operativos. Tan pronto como no haya ascii en sus etiquetas o factores Y necesite trabajar en Mac / Win / Lin, comenzarán a ocurrir una variedad de rarezas si exporta / importa desde y hacia Excel. Excel no puede manejar utf-8 con gracia (o csv para el caso). Entonces, en ese caso, se queda en Excel o se cambia a una aplicación de hoja de cálculo diferente (esto último no siempre es posible).
FvD
18

Ejemplo 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Probaría el paquete 'xlsx' porque es fácil de manejar y parece lo suficientemente maduro
  • funcionó bien para mí y no necesité ningún complemento como Perl o lo que sea

Ejemplo 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • hoy en día lo uso readxly he tenido una buena experiencia con él.
  • no se necesitan cosas adicionales
  • Buen rendimiento
Petermeissner
fuente
14

Este nuevo paquete se ve bien http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf No requiere rJava y usa 'Rcpp' para mayor velocidad.

RockScience
fuente
y está en desarrollo activo
RockScience
1
Estoy trabajando con algunos libros de Excel bastante grandes, y openxlxs es el único que puede manejar archivos tan grandes.
Jose R
Desafortunadamente, requiere "herramientas"
Ferdi
@Ferdi. no lo creo! Solo para crear el paquete una vez. No para uso posterior.
RockScience
5

Si se encuentra con el mismo problema y R le está dando un error - no pudo encontrar la función ".jnew" - Simplemente instale la biblioteca rJava. O si ya lo tiene, simplemente ejecute la biblioteca de líneas (rJava). Ese debería ser el problema.

Además, debería quedar claro para todos que es más fácil trabajar con archivos csv y txt, pero la vida no es fácil y, a veces, solo tienes que abrir un xlsx.

Wilmer E Henao
fuente
1
cuando cargo la versión 2.8.2 de aparece gdatael mensaje de inicio gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Me parece que debería abrir archivos xlsx, aunque es cierto que no lo he probado recientemente ...
Ben Bolker
1
Puedo confirmar que la gdataversión 2.8.2 lee xlsxarchivos con la read.xlsfunción.
Ben
4

Recientemente descubrí la función de Schaun Wheeler para importar archivos de Excel a R después de darme cuenta de que el paquete xlxs no se había actualizado para R 3.1.0.

https://gist.github.com/schaunwheeler/5825002

El nombre del archivo debe tener la extensión ".xlsx" y el archivo no se puede abrir cuando ejecuta la función.

Esta función es realmente útil para acceder al trabajo de otras personas. Las principales ventajas sobre el uso de la función read.csv son cuando

  • Importar varios archivos de Excel
  • Importación de archivos grandes
  • Archivos que se actualizan periódicamente

El uso de la función read.csv requiere abrir y guardar manualmente cada documento de Excel, lo que consume mucho tiempo y es muy aburrido. Por lo tanto, usar la función de Schaun para automatizar el flujo de trabajo es una gran ayuda.

Grandes apoyos para Schaun por esta solución.

Jonno Bourne
fuente
4

Para mí, el paquete openxlx funcionó de la manera más fácil.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Henrik Bata
fuente
2

¿Cuál es tu sistema operativo? ¿Qué versión de R está ejecutando: 32 bits o 64 bits? ¿Qué versión de Java tienes instalada?

Tuve un error similar cuando comencé a usar la read.xlsx()función y descubrí que mi problema (que puede o no estar relacionado con el suyo; como mínimo, esta respuesta debe verse como "pruebe esto también") estaba relacionado con la incompatibilidad de .xlsx pacakge con Java de 64 bits. Estoy bastante seguro de que el paquete .xlsx requiere Java de 32 bits.

Utilice R de 32 bits y asegúrese de que Java de 32 bits esté instalado. Esto puede solucionar su problema.

usuario2755425
fuente
2

¿Ha comprobado que R realmente puede encontrar el archivo, por ejemplo, file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14 de agosto de 2011 a las 23:05

El comentario anterior debería haber resuelto tu problema:

require("xlsx")
read.xlsx("filepath/filename.xlsx",1) 

debería funcionar bien después de eso.

contradironía
fuente
1

Es posible que pueda mantener varias pestañas y más información de formato si exporta a un archivo de hoja de cálculo de OpenDocument ( ods ) o un formato de Excel anterior y lo importa con el lector de ODS o el lector de Excel que mencionó anteriormente.

Benjamin Atkin
fuente
1

Como han dicho muchos aquí, estoy escribiendo lo mismo pero con un punto adicional.

Primero debemos asegurarnos de que nuestro R Studio tenga estos dos paquetes instalados:

  1. "readxl"
  2. "XLConnect"

Para cargar un paquete en R, puede usar la siguiente función:

install.packages("readxl/XLConnect")
library(XLConnect)
search()

La búsqueda mostrará la lista de paquetes actuales que están disponibles en su R Studio.

Ahora, otro problema, aunque es posible que tenga estos dos paquetes, pero aún puede encontrar problemas al leer el archivo "xlsx" y el error podría ser como "error: más columnas que el nombre de la columna"

Para resolver este problema, simplemente puede volver a guardar su hoja de Excel "xlsx" en

"CSV (delimitado por comas)"

y tu vida será super fácil ....

¡¡Que te diviertas!!

Rajeev Kumar Barnwal
fuente
1

Me he esforzado mucho en todas las respuestas anteriores. Sin embargo, en realidad no ayudaron porque usé una mac. La biblioteca de rio tiene esta función de importación que básicamente puede importar cualquier tipo de archivo de datos a Rstudio , ¡incluso aquellos archivos que usan idiomas distintos al inglés!

Pruebe los siguientes códigos:

    library(rio)
    AB <- import("C:/AB_DNA_Tag_Numbers.xlsx")
    AB <- AB[,1]

Espero que esto ayude. Para una referencia más detallada: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Suyang Xu
fuente