在 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')
我有一个数据框列表,示例如下所示。
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')