gpt4 book ai didi

R:按名称组合嵌套列表元素

转载 作者:行者123 更新时间:2023-12-04 10:16:12 25 4
gpt4 key购买 nike

假设我有一个列表结构,其中有 data.frames嵌套在每个元素中。

l <- list(A = list(D = data.frame(V1 = seq(3), V2 = LETTERS[1:3]),
E = data.frame(V1 = seq(3), V2 = LETTERS[4:6])),
B = list(D = data.frame(V1 = seq(3), V2 = LETTERS[7:9]),
E = data.frame(V1 = seq(3), V2 = LETTERS[10:12])))

$A
$A$D
V1 V2
1 1 A
2 2 B
3 3 C

$A$E
V1 V2
1 1 D
2 2 E
3 3 F


$B
$B$D
V1 V2
1 1 G
2 2 H
3 3 I

$B$E
V1 V2
1 1 J
2 2 K
3 3 L

我想找到一种方法来结合 DE data.frames分别来自父列表元素( AB )所以输出将是这样的:
$D
V1 V2
1 1 A
2 2 B
3 3 C
4 1 G
5 2 H
6 3 I

$E
V1 V2
1 1 D
2 2 E
3 3 F
4 1 J
5 2 K
6 3 L

我可以用一个循环来完成这个,但我试图找到一些更有效/更优雅的东西。
out <- vector("list", length(list))
for(i in c("D","E")){
out[[i]] <- do.call("rbind", lapply(l, function(x) x[[i]]))
}

最佳答案

我们展平嵌套 list到单个 list有 4 个元素( l1 ),然后是 split 'l1' 在替换前缀部分后由 'l1' 的名称组成,直到 .使用 sub .然后,我们rbind嵌套 list使用 do.call .

l1 <- do.call('c', l)
lapply(split(l1,sub('.*\\.', '', names(l1))),
function(x) do.call(rbind, x))

这也可以通过 purrr 来完成和 dplyr
library(purrr)
library(dplyr)
transpose(l) %>%
map(bind_rows)
#$D
#Source: local data frame [6 x 2]

# V1 V2
# (int) (chr)
#1 1 A
#2 2 B
#3 3 C
#4 1 G
#5 2 H
#6 3 I

#$E
#Source: local data frame [6 x 2]

# V1 V2
# (int) (chr)
#1 1 D
#2 2 E
#3 3 F
#4 1 J
#5 2 K
#6 3 L

关于R:按名称组合嵌套列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com