r - 使用 purrr 堆叠嵌套的数据帧列表
问题描述
我有一个数据框列表的列表,如下所示:
我刚刚编辑更改数据,使列表和嵌套列表的长度不相等。
test <- list(list(cars1 = head(mtcars), iris1 = head(iris)),
list(cars2 = tail(mtcars), iris2 = tail(iris)),
list(cars3 = tail(mtcars), iris3 = tail(iris)))
这给了我我想要的混合lapply()
和purrr
。
lapply(1:2, function(x) purrr::map_dfr(test, ~ .[[x]]))
有没有办法在一行中更有效地做到这一点purrr
?这似乎是一个相当普遍的任务。
解决方案
这是一个选项purrr
library(dplyr)
library(stringr)
library(purrr)
test %>%
flatten %>%
split(str_remove(names(.), '\\d+')) %>%
map(bind_rows)
#$cars
# mpg cyl disp hp drat wt qsec vs am gear carb
#1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
#2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
#3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
#4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
#5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
#6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
#7 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
#8 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
#9 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#10 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
#11 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
#12 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
#13 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
#14 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
#15 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#16 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
#17 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
#18 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 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
#7 6.7 3.3 5.7 2.5 virginica
#8 6.7 3.0 5.2 2.3 virginica
#9 6.3 2.5 5.0 1.9 virginica
#10 6.5 3.0 5.2 2.0 virginica
#11 6.2 3.4 5.4 2.3 virginica
#12 5.9 3.0 5.1 1.8 virginica
#13 6.7 3.3 5.7 2.5 virginica
#14 6.7 3.0 5.2 2.3 virginica
#15 6.3 2.5 5.0 1.9 virginica
#16 6.5 3.0 5.2 2.0 virginica
#17 6.2 3.4 5.4 2.3 virginica
#18 5.9 3.0 5.1 1.8 virginica
或者另一种选择是
map_dfr(test, enframe) %>%
group_split(name = str_remove(name, "\\d+")) %>%
map( ~ unnest(.x, value))
推荐阅读
- c# - .NET Core 2.1 管理会话变量
- python-3.x - 在 Django Rest Framework 的 View 类中访问自定义 HTTP 标头的常用方法
- java - 如何创建一个接受符号的构造函数,例如:*、+、()等
- python - 安装没有 pip/easy_install 或“python setup.py install”的模块
- php - 如何在 PHP 中将父子平表记录显示为嵌套列表?
- javascript - 如何从 SQL 查询数据中实现 EXT JS 存储树列表
- c++ - 如何在.cpp中实现属于非模板类的模板函数
- python - Python - 使用具有多个参数的多处理不起作用
- angular - 订阅 observable 返回 undefined
- apache-spark - Spark & PySpark:表级访问控制?