级别1的列表“ l_start”是一个命名列表,其本身嵌套了级别2的命名列表(“ l1”,“ l1a”)依次包含第3级的2-3个data.frame(a,b以及可能还有c)。
目标是根据名称重新获得第3级的数据帧,以获取“ 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 dataframes across nested lists
列表中仅一个df名称,而不是多个rbind data.frames in a list in R
级别1的列表“ l_start”是一个命名列表,本身嵌套了级别2的命名列表(“ l1”,“ l1a”),依次包含2-3个数据帧(级别a,b和c) 3.目标是重新绑定数据帧...
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