r - 在列表中连接数据框
问题描述
我有一个列表,每个条目都有许多数据框。
举个例子就更简单了:
my_list <- list()
my_list[[1]] <- list()
my_list[[1]][['iris']] <- iris %>% head()
my_list[[1]][['mtcars']] <- mtcars %>% head()
my_list[[2]] <- list()
my_list[[2]][['iris']] <- iris %>% head()
my_list[[2]][['mtcars']] <- mtcars %>% head()
print(my_list)
## [[1]]
## [[1]]$iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
##
## [[1]]$mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
##
##
## [[2]]
## [[2]]$iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
##
## [[2]]$mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
我需要在顶部列表中的所有条目中合并每个“类型”的数据框(例如,我需要一个数据框,它是列表每个条目处iris
所有数据框的串联)。iris
我尝试了一个 for 循环,但它很慢而且效率很低......我认为必须有更好的方法。
你能为我指出正确的方向吗?
提前致谢
解决方案
使用purrr::transpose
它将把所有具有相同名称的数据框放在同一个列表中,并且在每个列表中我们可以使用bind_rows
它们来组合它们。
library(purrr)
transpose(my_list) %>% map(dplyr::bind_rows)
#$iris
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
#7 5.1 3.5 1.4 0.2 setosa
#8 4.9 3.0 1.4 0.2 setosa
#9 4.7 3.2 1.3 0.2 setosa
#10 4.6 3.1 1.5 0.2 setosa
#11 5.0 3.6 1.4 0.2 setosa
#12 5.4 3.9 1.7 0.4 setosa
#$mtcars
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4...1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag...2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710...3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive...4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout...5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant...6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
#Mazda RX4...7 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag...8 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710...9 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive...10 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout...11 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant...12 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
推荐阅读
- r - 如何使用观察事件或 R Shiny 中的其他反应函数更改表列标题?
- python - 模型拟合中的 keras 错误 ValueError:形状 (32, 147) 和 (32, 2) 不兼容
- javascript - 为什么我的验证表单的 javascript 代码不能按要求工作?
- reactjs - Redux:如何调度唯一的对象键(唯一的 Id,而不是硬编码)
- azure-data-explorer - 检测数据库中的模式更改
- coldfusion - 在 cfloop 中使用 cfscript 进行字符串连接
- java - java在class.java中定义了一个新的Intent不识别
- php - Laravel 获取带有子目录的文件存储
- c++ - 确定包含转义字符的字符串的打印大小
- reactjs - 如何在不访问子组件代码的情况下从 React 函数组件的子组件数据中获取数据