R:合并两个数据帧列表

ros*_*sch 3 merge r list lapply mapply

我有两个数据帧列表,如下所示:

L1 <- list(Q1=list(A=data.frame(X1=1:3),C=data.frame(X1=1:3)),
        Q2=list(B=data.frame(X1=1:3),C=data.frame(X1=1:3)))
L2 <- list(Q1=list(B=data.frame(X1=4:6),C=data.frame(X1=4:6)),
        Q2=list(A=data.frame(X1=4:6),C=data.frame(X1=4:6)))
Run Code Online (Sandbox Code Playgroud)

第一级"Q1"和"Q2"的名称在两个列表中都相同.

我想合并两个列表,以便将具有相同名称的数据帧(例如"$ Q1 $ C")组合起来rbind,并将新的列表添加到列表中.所需的输出应如下所示:

> L3
$Q1
$Q1$A
  X1
1  1
2  2
3  3

$Q1$B
  X1
1  4
2  5
3  6

$Q1$C
  X1
1  1
2  2
3  3
4  4
5  5
6  6


$Q2
$Q2$A
  X1
1  4
2  5
3  6

$Q2$B
  X1
1  1
2  2
3  3

$Q2$C
  X1
1  1
2  2
3  3
4  4
5  5
6  6
Run Code Online (Sandbox Code Playgroud)

我尝试了一些使用的组合Map(),lapply()但我无法解决它.例如:

L3 <- Map('rbind',lapply(L1,'['),lapply(L2,'['))
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

mt1*_*022 5

这是一个使用基数R的解决方案:

x <- c(L1, L2)
lapply(split(x, names(x)), function(i){
    xsub <- do.call(c, unname(i))
    lapply(split(xsub, names(xsub)), function(j) do.call(rbind, unname(j)))
})
Run Code Online (Sandbox Code Playgroud)
  • split(x, names(x))Q1s组合Q2在一起;
  • xsub <- do.call(c, unname(i))Q1s或Q2s 组合成一个列表data.frames;
  • split(xsub, names(xsub))意志集团data.frame通过他们的名字S( ,,A );BC

输出是:

# $Q1
# $Q1$A
# X1
# 1  1
# 2  2
# 3  3
# 
# $Q1$B
# X1
# 1  4
# 2  5
# 3  6
# 
# $Q1$C
# X1
# 1  1
# 2  2
# 3  3
# 4  4
# 5  5
# 6  6
# 
# 
# $Q2
# $Q2$A
# X1
# 1  4
# 2  5
# 3  6
# 
# $Q2$B
# X1
# 1  1
# 2  2
# 3  3
# 
# $Q2$C
# X1
# 1  1
# 2  2
# 3  3
# 4  4
# 5  5
# 6  6
Run Code Online (Sandbox Code Playgroud)