listas insertar filtrar espaƱol ejemplos datos data crear creacion columna list r dataframe

insertar - Recombining una lista de Data.frames en un solo marco de datos



filtrar datos en r (5)

Esta pregunta ya tiene una respuesta aquí:

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 marco de datos 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


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


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 docs , 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)