Recombining una lista de Data.frames en un solo dataframe

Lo siento si esta pregunta ya ha sido respondida. Además, esta es mi primera vez en stackoverflow.

Tengo una pregunta para principiantes R sobre listas, marcos de datos y merge() y / o rbind() .

Empecé con un Panel que se parece a esto

 COUNTRY YEAR VAR A 1 A 2 B 1 B 2 

Para fines de eficiencia, creé una lista que consta de un dataframe para cada país y data.frame una variedad de cálculos en cada data.frame individual. Sin embargo, parece que no puedo combinar los marcos de datos individuales en un marco grande de nuevo.

rbind() y merge() me dicen que solo se permite el reemplazo de elementos.

¿Podría alguien decirme qué estoy haciendo mal / y cómo recombinar realmente los marcos de datos?

Gracias

Tal vez quieras hacer algo como:

do.call("rbind", my.df.list)

Tenga en cuenta que la solución básica

 do.call("rbind", my.df.list) 

será lento si tenemos muchos dataframes. Una solución escalable es:

 library(data.table) rbindlist(my.df.list) 

que, desde los documentos , es lo same as do.call("rbind", l) on data.frames, but much faster.

dplyr le permite usar la función bind_rows para eso:

 library(dplyr) foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(1,2,3)), df2 = data.frame(x=c('d', 'e', 'f'),y = c(4,5,6))) bind_rows(foo) 

Puede haber una forma mejor de hacer esto, pero parece que funciona y es sencillo. (Mi código tiene cuatro líneas para que sea más fácil ver los pasos, estos cuatro podrían combinarse fácilmente).

 # first re-create your data frame: A = matrix( ceiling(10*runif(8)), nrow=4) colnames(A) = c("country", "year_var") dfa = data.frame(A) # now re-create the list you made from the individual rows of the data frame: df1 = dfa[1,] df2 = dfa[2,] df3 = dfa[3,] df4 = dfa[4,] df_all = list(df1, df2, df3, df4) # to recreate your original data frame: x = unlist(df_all) # from your list create a single 1D array A = matrix(x, nrow=4) # dimension that array in accord w/ your original data frame colnames(A) = c("country", "year_var") # put the column names back on dfa = data.frame(A) # from the matrix, create your original data frame 

plyr es probablemente el mejor. Otro enfoque útil si los marcos de datos pueden ser diferentes es usar remodelar:

 library(reshape) data <- merge_recurse(listofdataframes) 

Mira mi respuesta a esta pregunta relacionada sobre la fusión de marcos de datos .