展平 R 中的命名列表 - 将名称转换为第一列
flatten a named list in R - converting the name into first column
说,我有一个命名列表:
library(dplyr)
myData <- mtcars %>%
group_by(cyl) %>%
group_map(~ head(.x, 1L))
names(myData) <- c("Mazda", "Honda", "Suzuki")
现在,我想将列表转换成如下所示的 table:
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 没有名称。如何将列表转换为 data.table 列 names
?
library(data.table)
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))
带有 tidyverse
的选项将是
library(dplyr)
bind_rows(myData, .id = 'name')
基本 R 选项
cbind(
name = names(myData),
do.call(rbind, c(myData, use.names = FALSE))
)
给予
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
说,我有一个命名列表:
library(dplyr)
myData <- mtcars %>%
group_by(cyl) %>%
group_map(~ head(.x, 1L))
names(myData) <- c("Mazda", "Honda", "Suzuki")
现在,我想将列表转换成如下所示的 table:
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 没有名称。如何将列表转换为 data.table 列 names
?
library(data.table)
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))
带有 tidyverse
的选项将是
library(dplyr)
bind_rows(myData, .id = 'name')
基本 R 选项
cbind(
name = names(myData),
do.call(rbind, c(myData, use.names = FALSE))
)
给予
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