varias superponer studio lineas graficos graficas r merge dataframe plyr data.table

superponer - Alternativas eficientes para fusionar para data.frames más grandes R



superponer graficas en r (3)

Estoy buscando un método eficiente (tanto de recursos informáticos como de aprendizaje / implementación) para fusionar dos marcos de datos más grandes (tamaño> 1 millón / 300 KB de datos).

"fusionar" en la base R y "unirse" en plyr parecen agotar toda mi memoria y bloquear mi sistema.

Ejemplo
cargar el marco de datos de prueba

y prueba

test.merged<-merge(test, test)

o

test.merged<-join(test, test, type="all")

    -

La siguiente publicación proporciona una lista de fusiones y alternativas:
Cómo unir (combinar) marcos de datos (interno, externo, izquierdo, derecho)?

Lo siguiente permite la inspección del tamaño del objeto:
https://heuristically.wordpress.com/2010/01/04/r-memory-usage-statistics-variable/

Datos producidos por el anonym


¿Tienes que hacer la fusión en R? Si no es así, combine los archivos de datos subyacentes con una simple concatenación de archivos y luego cárguelos en R. (me doy cuenta de que esto puede no aplicarse a su situación, pero si lo hace, podría ahorrarle muchos dolores de cabeza).


Aquí está el ejemplo obligatorio de data.table :

library(data.table) ## Fix up your example data.frame so that the columns aren''t all factors ## (not necessary, but shows that data.table can now use numeric columns as keys) cols <- c(1:5, 7:10) test[cols] <- lapply(cols, FUN=function(X) as.numeric(as.character(test[[X]]))) test[11] <- as.logical(test[[11]]) ## Create two data.tables with which to demonstrate a data.table merge dt <- data.table(test, key=names(test)) dt2 <- copy(dt) ## Add to each one a unique non-keyed column dt$X <- seq_len(nrow(dt)) dt2$Y <- rev(seq_len(nrow(dt))) ## Merge them based on the keyed columns (in both cases, all but the last) to ... ## (1) create a new data.table dt3 <- dt[dt2] ## (2) or (poss. minimizing memory usage), just add column Y from dt2 to dt dt[dt2,Y:=Y]


Aquí hay algunos tiempos para los métodos data.table vs. data.frame.
Usar data.table es mucho más rápido. Con respecto a la memoria, puedo informar informalmente que los dos métodos son muy similares (dentro del 20%) en el uso de RAM.

library(data.table) set.seed(1234) n = 1e6 data_frame_1 = data.frame(id=paste("id_", 1:n, sep=""), factor1=sample(c("A", "B", "C"), n, replace=TRUE)) data_frame_2 = data.frame(id=sample(data_frame_1$id), value1=rnorm(n)) data_table_1 = data.table(data_frame_1, key="id") data_table_2 = data.table(data_frame_2, key="id") system.time(df.merged <- merge(data_frame_1, data_frame_2)) # user system elapsed # 17.983 0.189 18.063 system.time(dt.merged <- merge(data_table_1, data_table_2)) # user system elapsed # 0.729 0.099 0.821