展平R中的命名列表-将名称转换为第一列

时间:2020-09-07 16:28:13

标签: r list data.table base

说,我有一个命名列表:

library(dplyr)
myData <- mtcars %>%
  group_by(cyl) %>%
  group_map(~ head(.x, 1L))
names(myData) <- c("Mazda", "Honda", "Suzuki")

现在,我想将列表转换成如下所示的表:

name  mpg disp  hp drat   wt  qsec vs am gear carb
1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2

我尝试过:

data.frame(Reduce(rbind, myData))
do.call(rbind.data.frame, myData)

,但是两者都导致没有名称的data.table。如何将列表转换为带有列names的data.table?

3 个答案:

答案 0 :(得分:2)

rbindlist(myData, idcol = "name")
#      name  mpg disp  hp drat   wt  qsec vs am gear carb
# 1:  Mazda 22.8  108  93 3.85 2.32 18.61  1  1    4    1
# 2:  Honda 21.0  160 110 3.90 2.62 16.46  0  1    4    4
# 3: Suzuki 18.7  360 175 3.15 3.44 17.02  0  0    3    2

或在基数R中:

data.frame(name = names(myData), do.call(rbind, myData))

答案 1 :(得分:1)

带有tidyverse的选项应该是

library(dplyr)
bind_rows(myData, .id = 'name')

答案 2 :(得分:1)

基本R选项

TableAPI

给予

cbind(
  name = names(myData),
  do.call(rbind, c(myData, use.names = FALSE))
)