varios txt studio read para paquete leer importar datos archivos r csv

txt - read.csv es extremadamente lento en la lectura de archivos csv con un gran número de columnas



paquete para leer csv en r (4)

Si leerá el archivo con frecuencia, podría valer la pena guardarlo desde R en formato binario utilizando la función de save . Especificar compress=FALSE menudo resulta en tiempos de carga más rápidos.

... A continuación, puede cargarlo con la función de load (¡sorpresa!).

d <- as.data.frame(matrix(1:1e6,ncol=1000)) write.csv(d, "c:/foo.csv", row.names=FALSE) # Load file with read.csv system.time( a <- read.csv("c:/foo.csv") ) # 3.18 sec # Load file using scan system.time( b <- matrix(scan("c:/foo.csv", 0L, skip=1, sep='',''), ncol=1000, byrow=TRUE) ) # 0.55 sec # Load (binary) file using load save(d, file="c:/foo.bin", compress=FALSE) system.time( load("c:/foo.bin") ) # 0.09 sec

Tengo un archivo .csv: example.csv con 8000 columnas x 40000 filas. El archivo csv tiene un encabezado de cadena para cada columna. Todos los campos contienen valores enteros entre 0 y 10. Cuando intento cargar este archivo con read.csv, resulta extremadamente lento. También es muy lento cuando agrego un parámetro nrow = 100. Me pregunto si hay una manera de acelerar el read.csv, o usar alguna otra función en lugar de read.csv para cargar el archivo en la memoria como una matriz o data.frame?

Gracias por adelantado.


Trate de usar la fread{data.table} . Esta es una de las maneras más rápidas de leer archivos .csv en R. Hay un buen punto de referencia aquí .

library(data.table) data <- fread("c:/data.csv")

Si desea hacerlo aún más rápido, también puede leer solo el subconjunto de columnas que desea usar:

data <- fread("c:/data.csv", select = c("col1", "col2", "col3"))


readr paquete de readr Hadley Wickham:

library(readr) data <- read_csv("file.csv")


Si su CSV solo contiene números enteros, debe usar scan lugar de read.csv , ya que ?read.csv dice:

‘read.table’ is not the right tool for reading large matrices, especially those with many columns: it is designed to read _data frames_ which may have columns of very different classes. Use ‘scan’ instead for matrices.

Como su archivo tiene un encabezado, necesitará skip=1 , y probablemente será más rápido si establece what=integer() . Si debe usar read.csv y el consumo de velocidad / memoria es una preocupación, establecer el argumento de las colClasses es una gran ayuda.