将Data.frames列表重新组合到单个数据框中

时间:2010-03-06 15:11:14

标签: list r dataframe

如果已经回答了这个问题,我很抱歉。另外,这是我第一次使用stackoverflow。

我有一个关于列表,数据框和merge()和/或rbind()的初学R问题。

我开始使用看起来像这样的面板

COUNTRY YEAR VAR
A         1
A         2
B         1
B         2

为了提高效率,我创建了一个列表,其中包含每个国家/地区的一个数据框,并对每个国家data.frame执行了各种计算。但是,我似乎无法将各个数据帧再次组合成一个大帧。

rbind()merge()都告诉我,只允许替换元素。

有人能告诉我我做错了什么以及如何重新组合数据框?

谢谢

5 个答案:

答案 0 :(得分:35)

也许你想做类似的事情:

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

答案 1 :(得分:8)

dplyr允许您使用bind_rows函数:

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)

答案 2 :(得分:7)

请注意基本解决方案

do.call("rbind", my.df.list)
如果我们有很多数据帧,

会很慢。可扩展的解决方案是:

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

,来自docs,是same as do.call("rbind", l) on data.frames, but much faster.

答案 3 :(得分:4)

可能有更好的方法可以做到这一点,但这似乎有效,而且很简单。 (我的代码有四行,因此更容易看到步骤;这四个可以轻松组合。)

# 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

答案 4 :(得分:3)

plyr可能是最好的。如果数据帧可能不同,另一种有用的方法是使用重塑:

library(reshape)
data <- merge_recurse(listofdataframes)

查看我对this related question on merging data frames的回答。