在 do.call 中未将列表名称作为行名称

Not getting list names as row names in do.call

我有一个数据框列表,示例如下所示。

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.4, 1.7), Petal.Width = c(0.2, 0.2, 0.2, 0.2, 
0.2, 0.4), Species = structure(c(1L, 1L, 1L, 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, 
    3, 2.5, 3, 3.4, 3), Petal.Length = c(5.7, 5.2, 5, 5.2, 5.4, 
    5.1), Petal.Width = c(2.5, 2.3, 1.9, 2, 2.3, 1.8), Species = structure(c(3L, 
    3L, 3L, 3L, 3L, 3L), .Label = c("setosa", "versicolor", "virginica"
    ), class = "factor")), row.names = c("A", "B", "C", "D", 
"E", "F"), 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')