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)
任何帮助表示赞赏!
这是一个使用基数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)