我有两个这样的数据框列表:
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/