trabajar studio read leer importar exportar desde datos con commander r excel xlsx

leer - read.xlsx r studio



Importar un gran archivo xlsx en R? (8)

Como mencioné en la pregunta canónica Excel-> R , una alternativa reciente que surgió proviene del paquete readxl , que me readxl bastante rápido, en comparación con, por ejemplo, openxlsx y xlsx .

Dicho esto, hay un límite definido para el tamaño de la hoja de cálculo, por lo que es mejor que simplemente fread la cosa como .csv y fread .

Me pregunto si alguien sabe de una forma de importar datos de un archivo xlsx "grande" (~ 20Mb). Intenté usar las bibliotecas xlsx y XLConnect. Desafortunadamente, ambos usan rJava y siempre obtengo el mismo error:

> library(XLConnect) > wb <- loadWorkbook("MyBigFile.xlsx") Error: OutOfMemoryError (Java): Java heap space

o

> library(xlsx) > mydata <- read.xlsx2(file="MyBigFile.xlsx") Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : java.lang.OutOfMemoryError: Java heap space

También intenté modificar los parámetros java.parame antes de cargar rJava:

> options( java.parameters = "-Xmx2500m") > library(xlsx) # load rJava > mydata <- read.xlsx2(file="MyBigFile.xlsx") Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : java.lang.OutOfMemoryError: Java heap space

o después de cargar rJava (esto es un poco estúpido, creo):

> library(xlsx) # load rJava > options( java.parameters = "-Xmx2500m") > mydata <- read.xlsx2(file="MyBigFile.xlsx") Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : java.lang.OutOfMemoryError: Java heap space

Pero nada funciona. ¿Alguien tiene alguna idea?


Encontré este hilo buscando una respuesta a la misma pregunta. En lugar de intentar hackear un archivo xlsx desde R, lo que terminó funcionando para mí fue convertir el archivo a .csv usando python y luego importar el archivo a R usando una función de escaneo estándar.

Consulte: https://github.com/dilshod/xlsx2csv


Estoy de acuerdo con @orville jackson response y realmente me ayudó a mí también.

En línea con la respuesta proporcionada por @orville jackson. aquí está la descripción detallada de cómo puede usar openxlsx para leer y escribir archivos grandes.

Cuando el tamaño de los datos es pequeño, R tiene muchos paquetes y funciones que pueden utilizarse según su requerimiento.

write.xlsx, write.xlsx2, XLconnect también hacen el trabajo, pero a veces son lentas en comparación con openxlsx.

Por lo tanto, si se trata de grandes conjuntos de datos y se encontró con errores de Java. Sugeriría echar un vistazo a "openxlsx", que es realmente impresionante y reducir el tiempo en 1/12.

Lo probé todo y finalmente quedé realmente impresionado con el rendimiento de las capacidades de openxlsx.

Estos son los pasos para escribir múltiples conjuntos de datos en varias hojas.

install.packages("openxlsx") library("openxlsx") start.time <- Sys.time() # Creating large data frame x <- as.data.frame(matrix(1:4000000,200000,20)) y <- as.data.frame(matrix(1:4000000,200000,20)) z <- as.data.frame(matrix(1:4000000,200000,20)) # Creating a workbook wb <- createWorkbook("Example.xlsx") Sys.setenv("R_ZIPCMD" = "C:/Rtools/bin/zip.exe") ## path to zip.exe

Sys.setenv ("R_ZIPCMD" = "C: /Rtools/bin/zip.exe") tiene que ser estático ya que toma referencia de alguna utilidad de Rtools.

Nota: Incase Rtools no está instalado en su sistema, instálelo primero para una experiencia fluida. aquí está el enlace para su referencia: (elija la versión apropiada) https://cran.r-project.org/bin/windows/Rtools/

verifique las opciones según el siguiente enlace (necesita seleccionar toda la casilla de verificación durante la instalación) https://cloud.githubusercontent.com/assets/7400673/12230758/99fb2202-b8a6-11e5-82e6-836159440831.png

# Adding a worksheets : parameters for addWorksheet are 1. Workbook Name 2. Sheet Name addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") # Writing data in to respetive sheets: parameters for writeData are 1. Workbook Name 2. Sheet index/ sheet name 3. dataframe name writeData(wb, 1, x) # incase you would like to write sheet with filter available for ease of access you can pass the parameter withFilter = TRUE in writeData function. writeData(wb, 2, x = y, withFilter = TRUE) ## Similarly writeDataTable is another way for representing your data with table formatting: writeDataTable(wb, 3, z) saveWorkbook(wb, file = "Example.xlsx", overwrite = TRUE) end.time <- Sys.time() time.taken <- end.time - start.time time.taken

El paquete openxlsx es realmente bueno para leer y escribir datos enormes desde / en archivos de Excel y tiene muchas opciones para el formateo personalizado dentro de Excel.

El hecho interesante es que no tenemos que preocuparnos por la memoria del montón de Java aquí.


La sugerencia de @ flodel de convertir a CSV parece ser la más directa. Si por alguna razón, esa no es una opción, puede leer en el archivo en fragmentos:

require(XLConnect) chnksz <- 2e3 s <- <sheet> wb <- loadWorkbook(<file>, s) tot.rows <- getLastRow(wb) last.row =0 for (i in seq(ceiling( tot.rows / chnksz) )) { next.batch <- readWorksheet(wb, s, startRow=last.row+i, endRow=last.row+chnksz+i) # optionally save next.batch to disk or # assign it to a list. See which works for you. }


Me encontré con esta pregunta cuando alguien me envió (otro más) archivo de Excel para analizar. Este ni siquiera es tan grande, pero por alguna razón me encontré con un error similar:

java.lang.OutOfMemoryError: GC overhead limit exceeded

Basado en el comentario de @Dirk Eddelbuettel en una respuesta anterior, instalé el paquete openxlsx ( http://cran.r-project.org/web/packages/openxlsx/ ). y luego corrió:

library("openxlsx") mydf <- read.xlsx("BigExcelFile.xlsx", sheet = 1, startRow = 2, colNames = TRUE)

Era justo lo que estaba buscando. Fácil de usar y rápido. Es mi nuevo BFF. Gracias por el consejo @Dirk E!

Por cierto, no quiero escatimar esta respuesta de Dirk E, así que si publica una respuesta, ¡acéptala en lugar de la mía!


Sé que esta pregunta es un poco vieja, pero hay una buena solución para esto hoy en día. Este es un paquete predeterminado cuando intentas importar excel en Rstudio con GUI y funciona bien en mi situación.

library(readxl) data <- read_excel(filename)


También tuve el mismo error en xlsx::read.xlsx y XLConnect::readWorksheetFromFile . Quizás pueda usar RODBC::odbcDriverConnect y RODBC::sqlFetch , que usa Microsoft RODBC, que es mucho más eficiente.


options(java.parameters = "-Xmx2048m") ## memory set to 2 GB library(XLConnect)

permitir más memoria usando "opciones" antes de que se cargue cualquier componente java. A continuación, cargue la biblioteca XLConnect (utiliza Java).

Eso es. Comience a leer en los datos con readWorksheet .... y así sucesivamente. :)