基于另一个向量中的索引组合列表中的元素

时间:2012-07-06 06:53:05

标签: r list indexing

给出一个列表(a)和一个与a:

长度相同的数字向量(b)
a <- list(1, c(3, 7), 5)
b <- c(1,1,2)

如何创建一个长度为max(b)的新列表,其中a中的每个元素都根据b放入相应的索引中,如果出现多次,则组合起来,这样就得到:

[[1]]
[1] 1 3 7

[[2]]
[1] 5

这应该非常有效地完成(没有循环),因为我的数据的维度往往非常大......

我很确定有一个明显的解决方案我没想过......

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

怎么样:

split(unlist(a), rep(b, sapply(a, length)))
$`1`
[1] 1 3 7

$`2`
[1] 5

答案 1 :(得分:3)

这是另一种方式

> lapply(split(a, b), unlist)
$`1`
[1] 1 3 7

$`2`
[1] 5