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.