将具有相同名称的列表列表元素合并

3

我有一个包含4个相同名称的列表:

lst1 <- 
list(list(c(1,2,3)),list(c(7,8,9)),list(c(4,5,6)),list(c(10,11,12)))
names(lst1) <- c("a","b","a","b")

我希望将子列表合并在一起(第一个“a”和第二个“a”合并,第一个“b”和第二个“b”合并:
result <- list(list(c(1,2,3,4,5,6)),list(c(7,8,9,10,11,12)))
names(result) <- c("a","b")

我尝试了多种方法,但无法理解。


请您能否举个例子,展示一下期望的结果应该是怎样的呢?另外,看一下您目前为止尝试过哪些也会很有帮助。 - Mr_Z
1
结果是我想要它看起来的样子的示例。 - Nienke Mekkes
3个回答

4

由于lst1["a"]不能给出所有命名为alst1元素,因此我们需要使用names(lst1)。一种基本的R方法是:

nm <- names(lst1)
result <- lapply(unique(nm), function(n) unname(unlist(lst1[nm %in% n])))
names(result) <- unique(nm)
result
# $a
# [1] 1 2 3 4 5 6
#
# $b
# [1]  7  8  9 10 11 12

谢谢,这是一个优雅的解决方案。 - Nienke Mekkes
一个 purrr 的翻译: map(set_names(unique(names(lst1))), ~unlist(lst1[names(lst1)==.],use.names = FALSE)) - moodymudskipper

3
另一种选择是先使用unlist,然后再split结果向量。
vec <- unlist(lst1)
split(unname(vec), sub("\\d+$", "", names(vec)))
#$a
#[1] 1 2 3 4 5 6

#$b
#[1]  7  8  9 10 11 12

2

将具有相同名称的元素分组并使用unlist函数进行处理:

tapply(lst1,names(lst1),FUN=function(x) unname(unlist(x)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接