R:合并两个数据帧列表列表

标签 r list merge 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)))

第一级“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

我尝试了一些使用 Map()lapply() 的组合,但我无法修复它。例如:

L3 <- Map('rbind',lapply(L1,'['),lapply(L2,'['))

感谢任何帮助!

最佳答案

这是一个使用 base 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)))
})
  • split(x, names(x))会放Q1一起和Q2我们在一起;
  • xsub <- do.call(c, unname(i))将合并Q1 s 或 Q2进入列表data.frames ;
  • split(xsub, names(xsub))会群data.frame按他们的名字 ( A , B , C );

输出是:

# $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

关于R:合并两个数据帧列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672496/

相关文章:

r - R 中没有重复对的笛卡尔积

sql - 合并 - 有条件 "WHEN MATCHED THEN UPDATE"

r - 在 R 中合并时有没有办法更新现有变量?

python - R - 使用行级条件变量合并两个 Data.Frame

R Shiny : how to prevent duplicate plot update with nested selectors?

r - 将象限添加到 R 散点图,以及从图指向其各自标签的线

r - 如何将特定值添加到特定列的行中的特定位置?

java - 如何在java中将列表字符串列表转换为列表整数列表

scala - 在 Scala 中如何用反向维度对列表中的元素进行分组?

c# - 从多个 (n) 列表生成所有组合