问题描述
list(First = structure(list(Sepal.Length = c(5.1,4.9,4.7,4.6,5,5.4),Sepal.Width = c(3.5,3,3.2,3.1,3.6,3.9),Petal.Length = c(1.4,1.4,1.3,1.5,1.7),Petal.Width = c(0.2,0.2,0.4),Species = structure(c(1L,1L,1L),.Label = c("setosa","versicolor","virginica"),class = "factor")),row.names = c("A","B","C","D","E","F"),class = "data.frame"),Second = structure(list(
Sepal.Length = c(6.7,6.7,6.3,6.5,6.2,5.9),Sepal.Width = c(3.3,2.5,3.4,3),Petal.Length = c(5.7,5.2,5.4,5.1),Petal.Width = c(2.5,2.3,1.9,2,1.8),Species = structure(c(3L,3L,3L),"virginica"
),class = "data.frame"))
我期望将列表名作为行名放在do.call()
上,但没有得到预期的结果。因此,我希望列表名称在合并后作为行名称。
do.call(rbind,df)
解决方法
您没有将列表名称作为行名,因为您的数据框架已经具有行名。因此,您需要先删除行名,然后合并列表。
library(tibble)
df <- lapply(df,function(x){
x <- rownames_to_column(x,var = "col")
})
do.call(rbind,df)
col Sepal.Length Sepal.Width Petal.Length Petal.Width Species
First.1 A 5.1 3.5 1.4 0.2 setosa
First.2 B 4.9 3.0 1.4 0.2 setosa
First.3 C 4.7 3.2 1.3 0.2 setosa
First.4 D 4.6 3.1 1.5 0.2 setosa
First.5 E 5.0 3.6 1.4 0.2 setosa
First.6 F 5.4 3.9 1.7 0.4 setosa
Second.1 A 6.7 3.3 5.7 2.5 virginica
Second.2 B 6.7 3.0 5.2 2.3 virginica
Second.3 C 6.3 2.5 5.0 1.9 virginica
Second.4 D 6.5 3.0 5.2 2.0 virginica
Second.5 E 6.2 3.4 5.4 2.3 virginica
Second.6 F 5.9 3.0 5.1 1.8 virginica
,
我们可以使用bind_rows
library(dplyr)
bind_rows(lst1,.id = 'dfID')