r - 如何跨第三级命名列表 rbind data.frames?
问题描述
第 1 层的列表“l_start”是一个命名列表,它本身在第 2 层嵌套命名列表(“l1”,“l1a”),在第 3 层依次包含 2-3 个数据帧(a、b 和可能的 c)。
目标是根据名称在第 3 级 rbind 数据帧(如果可用)以获得“l_finish”(首选 data.table 和 rlist 解决方案,但 purrr 或 base 也可以)
# Level 2
l1 <-
# Level 3
list(a = data.frame(matrix(1:4, ncol=2)),
b = data.frame(matrix(1:4, ncol=2)),
c= data.frame(matrix(1:4, ncol=2)))
# Level 2
l1a <-
# Level 3
list(a = data.frame(matrix(1:6, ncol=2)),
b = data.frame(matrix(1:6, ncol=2)))
# Level 1 "l_start"
l_start <-
list(l1, l1a)
names(l_start) <- c("l1", "l1a")
“l_finish”应该是什么样子
l_finish <-
list(l1_1a = list(a = rbind(l1$a, l1a$a),
b = rbind(l1$b, l1a$b)))
希望最终产品“l_finish”注意,c 被删除,因为不在两个列表中
l_finish
#> $l1_1a
#> $l1_1a$a
#> X1 X2
#> 1 1 3
#> 2 2 4
#> 3 1 4
#> 4 2 5
#> 5 3 6
#>
#> $l1_1a$b
#> X1 X2
#> 1 1 3
#> 2 2 4
#> 3 1 4
#> 4 2 5
#> 5 3 6
关闭但无法完全到达那里
Rbind 发生在嵌套列表中的示例 rbind 数据帧之上一级
列表中只有一个 df 名称,而不是 R 列表中的多个 rbind data.frames
解决方案
一个purrr
解决方案:
library(purrr)
cols <- intersect(names(l_start[[1]]), names(l_start[[2]]))
map(l_start, `[`, cols) %>% transpose() %>% map(bind_rows)
#$a
# X1 X2
#1 1 3
#2 2 4
#3 1 4
#4 2 5
#5 3 6
#$b
# X1 X2
#1 1 3
#2 2 4
#3 1 4
#4 2 5
#5 3 6
intersect
我们使用,选择列表中的常用名称transpose
并绑定行。
推荐阅读
- angular - 从 web-api 返回错误 500 时 catchError 不工作
- flutter - 我想在相机屏幕选项卡上隐藏应用栏和底部导航栏
- python - 获取queryset django时添加功能
- google-cloud-firestore - 如何使用安全规则限制地火采石场的范围?
- php - 在 Laravel 中按名称进行数组分组
- swift - 防止 List 中的最后一行被 ZStack 中的其他视图覆盖
- javascript - 使用 vm.$watch() 多次而不是一次处理多个回调?
- python - 如何在 django-rest-framework 的序列化程序中使用时区序列化时间?
- javascript - 获取 url img 数据并将其设置在我的 html 中 img 的 src 属性中
- sql - 如何检查两个用户是否有私人聊天?SQL