在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.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')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...