首页 > 解决方案 > 在列表中连接数据框

问题描述

我有一个列表,每个条目都有许多数据框。

举个例子就更简单了:

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 循环,但它很慢而且效率很低......我认为必须有更好的方法。

你能为我指出正确的方向吗?

提前致谢

标签: rdataframe

解决方案


使用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

推荐阅读