tutorial paquete formatstyle extension dtoptions data r data.table fread

paquete - Lectura rápida y combinación de varios archivos usando data.table(con fread)



render dt r (1)

Tengo varios archivos de texto diferentes con la misma estructura. Ahora quiero leerlos en R usando fread, y luego unirlos en un conjunto de datos más grande.

## First put all file names into a list library(data.table) all.files <- list.files(path = "C:/Users",pattern = ".txt") ## Read data using fread readdata <- function(fn){ dt_temp <- fread(fn, sep=",") keycols <- c("ID", "date") setkeyv(dt_temp,keycols) # Notice there''s a "v" after setkey with multiple keys return(dt_temp) } # then using mylist <- lapply(all.files, readdata) mydata <- do.call(''rbind'',mylist)

El código funciona bien, pero la velocidad no es satisfactoria. Cada archivo txt tiene 1M observaciones y 12 campos.

Si uso el fread para leer un solo archivo, es rápido. Pero al usar apply , la velocidad es extremadamente lenta, y obviamente toma mucho tiempo que leer los archivos uno por uno. Me pregunto dónde salió mal aquí, ¿hay alguna mejora para la ganancia de velocidad?

plyr paquete llply en plyr , no hay muchas ganancias de velocidad.

Además, ¿hay alguna sintaxis en data.table para lograr una unión vertical como rbind y union en sql ?

Gracias.


Use rbindlist() que está diseñado para rbind una list de data.table ''s together ...

mylist <- lapply(all.files, readdata) mydata <- rbindlist( mylist )

Y como dice @Roland , ¡no establezca la clave en cada iteración de su función!

Así que en resumen, esto es lo mejor:

l <- lapply(all.files, fread, sep=",") dt <- rbindlist( l ) setkey( dt , ID, date )