如何在R中聚合list()的名称

时间:2019-02-07 11:24:25

标签: r

我有一个这样创建的列表:

$`a`
[1] 3
$`a`
[1] 15
$`a`
[1] 30
$`b`
[1] 3
$`b`
[1] 9
$`c`
[1] 15
$`c`
[1] 21

我想知道是否有任何方法可以将list()中的相同$聚集在一起,因此看起来像这样:

$`a`
[1] 3 15 30
$`b`
[1] 3 9
$`c`
[1] 15 21

非常感谢您的友好回答!

2 个答案:

答案 0 :(得分:5)

另一个选择是

unstack(stack(l))
$a
[1] 1 2 3

$b
[1] 4 5

$c
[1] 6

数据

l <- list(a = 1, a = 2, a = 3, b = 4, b = 5, c = 6)

答案 1 :(得分:2)

我们unlist list(假设有一个列表元素,并且split基于names的{​​{1}}

list

在一般情况下,即split(unlist(lst1, use.names = FALSE), names(lst1)) #$a #[1] 1 2 3 #$b #[1] 4 5 #$c #[1] 6 大于1的元素

length

但是,with(stack(lst1), split(values, ind)) 对于大型数据集会有些慢,因此,在这种情况下,请将stacksplit一起使用

lengths

基准

更大数据集上的基准

split(unlist(lst1), rep(names(lst1), lengths(lst1)))

数据

lst2 <- rep(lst1, 1e5)
system.time(split(unlist(lst2, use.names = FALSE), names(lst2)))
#   user  system elapsed 
#  0.067   0.009   0.076 
system.time(unstack(stack(lst2)))
#   user  system elapsed 
#  0.696   0.031   0.681 
system.time(with(stack(lst2), split(values, ind)))
#   user  system elapsed 
#  0.447   0.027   0.475 
system.time(split(unlist(lst2), rep(names(lst2), lengths(lst2))))
#   user  system elapsed 
#  0.100   0.005   0.105