将data.frame列表转换为单个data.frame结构

将data.frame列表转换为单个data.frame结构,r,list,R,List,我正在尝试将包含多个数据帧的列表重新格式化为一个数据帧。我读过很多书,但找不到实现这一目标所需的具体synthax 我有一份清单: list1 = list(df1 = data.frame(bread = c("sourdough","baguette","boule","multigrain"), cheese = c("parmigiano","cheddar",&quo

我正在尝试将包含多个数据帧的列表重新格式化为一个数据帧。我读过很多书,但找不到实现这一目标所需的具体synthax

我有一份清单:

list1 = list(df1 = data.frame(bread = c("sourdough","baguette","boule","multigrain"), cheese = c("parmigiano","cheddar","mozzarella","stilton")), 
           df2 = data.frame(bread = c("toast","brioche","focaccia","whole wheat"), cheese = c("gorgonzola","camembert","gouda","feta")))

我要求数据框垂直堆叠,并添加一列,表示它们来自的列表元素名称,如以下示例所示:

df = data.frame(breads = c("sourdough","baguette","boule","multigrain","toast","brioche","focaccia","whole wheat"),
                cheese = c("parmigiano","cheddar","mozzarella","stilton","gorgonzola","camembert","gouda","feta"),
                factor = rep(c("df1","df2"),each = 4))
非常简单,但我无法理解它。

您可以使用

do.call(rbind,list1)

            bread     cheese
df1.1   sourdough parmigiano
df1.2    baguette    cheddar
df1.3       boule mozzarella
df1.4  multigrain    stilton
df2.1       toast gorgonzola
df2.2     brioche  camembert
df2.3    focaccia      gouda
df2.4 whole wheat       feta
编辑:

如果您想要显式的“From”col

new_df您可以尝试以下方法:

#Bind
DF <- do.call(rbind,list1)
#Create factor
DF$factor <- rownames(DF)
rownames(DF)<-NULL
DF$factor <- gsub("\\..*","",DF$factor)
DF

        bread     cheese factor
1   sourdough parmigiano    df1
2    baguette    cheddar    df1
3       boule mozzarella    df1
4  multigrain    stilton    df1
5       toast gorgonzola    df2
6     brioche  camembert    df2
7    focaccia      gouda    df2
8 whole wheat       feta    df2
#绑定

这能回答你的问题吗?嗯……这似乎适用于我给出的示例……但不是我的原始数据集。一定有什么东西我错过了。这是我原始数据集的结构(只显示了第一个元素),它们是矩阵而不是data.frames,我想这就是它的区别所在<代码>11$1:num[1:1000,1:3]0.85 0.849 0.847 0.846 0.844…的列表attr(*,“dimnames”)=2个….$的列表:chr[1:1000]“1”“2”“3”“4”chr[1:3]“fit2”“lwr2”“upr2”
好的,我想我明白了。我想是因为它们是矩阵,所以不起作用。我做了
lappy(list1,函数(x)as.data.frame(x))
然后使用了您的代码,它似乎起了作用。为了获得完全相同的结果,您可以将其缩短为
lappy(list1,as.data.frame)
#Bind
DF <- do.call(rbind,list1)
#Create factor
DF$factor <- rownames(DF)
rownames(DF)<-NULL
DF$factor <- gsub("\\..*","",DF$factor)
DF

        bread     cheese factor
1   sourdough parmigiano    df1
2    baguette    cheddar    df1
3       boule mozzarella    df1
4  multigrain    stilton    df1
5       toast gorgonzola    df2
6     brioche  camembert    df2
7    focaccia      gouda    df2
8 whole wheat       feta    df2