r-如何在第三级命名列表中绑定data.frames



级别1的列表"l_start"是一个命名列表,其本身嵌套级别2的命名列表("l1"、"l1a"(,依次包含2-3个级别3的数据帧(a、b和可能的c(。

目标是根据名称在级别3绑定数据帧(如果可用(以获得"l_finish"(数据表和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数据帧

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

我们使用intersecttranspose选择列表中的常用名称,并绑定行。

最新更新