drj*_*122 4 merge r list tidyverse
这是我的数据的一个例子.
ll <- list(
ll1 = list(Mi = 1:4,
Mj = 10:13,
dn = "l1"),
ll2 = list(Mi = 5:8,
Mj = 14:17,
dn = "l2"))
> str(ll)
List of 2
$ ll1:List of 3
..$ Mi: int [1:4] 1 2 3 4
..$ Mj: int [1:4] 10 11 12 13
..$ dn: chr "l1"
$ ll2:List of 3
..$ Mi: int [1:4] 5 6 7 8
..$ Mj: int [1:4] 14 15 16 17
..$ dn: chr "l2"
Run Code Online (Sandbox Code Playgroud)
我正在尝试将每个Mi,每个Mj和每个dn组合在一起.因此最终结果将是3个向量:1个组合Mi,1个组合Mj,以及1个组合dn.即,Mi的最终结果将是类似的
> c(ll$ll1$Mi,ll$ll2$Mi)
[1] 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)
Mj和dn的类似最终结果.我想知道如何简单地做到这一点,最好是使用来自tidyverse的东西.列表的数量会有所不同,一般不会是2,这就是为什么我认为c不是一个很好的解决方案.我猜测地图功能可以在这里工作,但我还没有找到解决方案.
随着pmap从purrr.pmap需要的输入列表(在这种情况下,两个列表的列表),并应用c功能ll[[1]][[1]],ll[[2]][[1]]...然后ll[[1]][[2]],ll[[2]][[2]]...等等:
library(purrr)
pmap(ll, c)
Run Code Online (Sandbox Code Playgroud)
输出:
$Mi
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24
1 2 3 4 5 6 7 8
$Mj
ll11 ll12 ll13 ll14 ll21 ll22 ll23 ll24
10 11 12 13 14 15 16 17
$dn
ll1 ll2
"l1" "l2"
Run Code Online (Sandbox Code Playgroud)
如果我们不想保留矢量名称,我们可以使用以下use.names参数c:
pmap(ll, c, use.names = FALSE)
Run Code Online (Sandbox Code Playgroud)
输出:
$Mi
[1] 1 2 3 4 5 6 7 8
$Mj
[1] 10 11 12 13 14 15 16 17
$dn
[1] "l1" "l2"
Run Code Online (Sandbox Code Playgroud)