在R中按名称合并一个列表的列表元素
Merge list elements of one single list by name in R
我有一个包含大量元素的列表(最后应该是一个逆向索引)。
- 所有元素都是具有不同长度的数值向量。
- 元素名称出现多次
> par.list
$NAMEA
[1] 1 2 3 4 5 7 8 9 10
$NAMEB
[1] 6
$NAMEB
[1] 11 12 13 16 17
$NAMEA
[1] 14 15 18 19 20
我寻找的是一种高效的方法,因此我得到了
> merged.list
$NAMEA
[1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
$NAMEB
[1] 6 11 12 13 16 17
我相信有一种简单的方法可以做到这一点,但我只是没有在这里找到合适的线程,所以我将不胜感激!
我们可以stack
命名list
到两列data.frame和split
with(stack(par.list), split(values, ind))
-输出
$NAMEA
[1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
$NAMEB
[1] 6 11 12 13 16 17
数据
par.list <- list(NAMEA = c(1, 2, 3, 4, 5, 7, 8, 9, 10), NAMEB = 6, NAMEB = c(11L,
12L, 13L, 16L, 17L), NAMEA = c(14L, 15L, 18L, 19L, 20L))
另一个选项 lapply
-
uq_names <- unique(names(par.list))
setNames(lapply(uq_names, function(x)
unlist(par.list[names(par.list) == x], use.names = FALSE)), uq_names)
#$NAMEA
# [1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
#$NAMEB
#[1] 6 11 12 13 16 17
我有一个包含大量元素的列表(最后应该是一个逆向索引)。
- 所有元素都是具有不同长度的数值向量。
- 元素名称出现多次
> par.list
$NAMEA
[1] 1 2 3 4 5 7 8 9 10
$NAMEB
[1] 6
$NAMEB
[1] 11 12 13 16 17
$NAMEA
[1] 14 15 18 19 20
我寻找的是一种高效的方法,因此我得到了
> merged.list
$NAMEA
[1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
$NAMEB
[1] 6 11 12 13 16 17
我相信有一种简单的方法可以做到这一点,但我只是没有在这里找到合适的线程,所以我将不胜感激!
我们可以stack
命名list
到两列data.frame和split
with(stack(par.list), split(values, ind))
-输出
$NAMEA
[1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
$NAMEB
[1] 6 11 12 13 16 17
数据
par.list <- list(NAMEA = c(1, 2, 3, 4, 5, 7, 8, 9, 10), NAMEB = 6, NAMEB = c(11L,
12L, 13L, 16L, 17L), NAMEA = c(14L, 15L, 18L, 19L, 20L))
另一个选项 lapply
-
uq_names <- unique(names(par.list))
setNames(lapply(uq_names, function(x)
unlist(par.list[names(par.list) == x], use.names = FALSE)), uq_names)
#$NAMEA
# [1] 1 2 3 4 5 7 8 9 10 14 15 18 19 20
#$NAMEB
#[1] 6 11 12 13 16 17