如何在第三级命名列表中查找数据框?

问题描述 投票:0回答:1

级别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.目标是重新绑定数据帧...

r data.table bind nested-lists
1个回答
1
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.