假设我有一个向量x
的列表,如下所示:
> x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6), x4=c(4,8,4), x5=c(4,33,4), x6=c(9,6,7))
假设我还有另外两个向量y
,y1
这样:
y <- c(3,3)
y1 <- c(2,4)
我想基于x
和y
的值拆分y1
。例如,
对于y
,我想将x
分成两个子列表,它们的向量数相同(每个子列表中有3个向量)
对于y1
,我想将x
分成两个具有不同数量向量的子列表,其中第一个子列表包含2个向量,第二个子列表包含4个向量。
我尝试过:
> z <- split(x, y[1]))
但这不是我所期望的。
输出应如下:
基于y
:
sublist_1 = list(x1, x2, x3),
sublist_2= list(x4,x5,x6)
基于y1
:
sublist_1 = list(x1, x2).
sublist_2= list(x1, x2, x3, x4).
有什么帮助吗?
答案 0 :(得分:1)
我们可以使用split
通过创建要拆分的组来将列表拆分为元素。
split(x, rep(c(1, 2), y))
#$`1`
#$`1`$x1
#[1] 1 2 3
#$`1`$x2
#[1] 1 4 3
#$`1`$x3
#[1] 3 4 6
#$`2`
#$`2`$x4
#[1] 4 8 4
#$`2`$x5
#[1] 4 33 4
#$`2`$x6
#[1] 9 6 7
我们还可以编写一个函数来完成此操作
split_list <- function(x, split_var) {
split(x, rep(1:length(split_var), split_var))
}
split_list(x, y1)
#$`1`
#$`1`$x1
#[1] 1 2 3
#$`1`$x2
#[1] 1 4 3
#$`2`
#$`2`$x3
#[1] 3 4 6
#$`2`$x4
#[1] 4 8 4
#$`2`$x5
#[1] 4 33 4
#$`2`$x6
#[1] 9 6 7