我有一个这样创建的列表:
$`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
非常感谢您的友好回答!
答案 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))
对于大型数据集会有些慢,因此,在这种情况下,请将stack
与split
一起使用
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