如何根据r中另一个向量的值将向量列表拆分为子列表
假设我有一个向量列表如何根据r中另一个向量的值将向量列表拆分为子列表,r,R,假设我有一个向量列表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的值拆分x。例如 对于y,我想将x分成两个子列表,每个子列表中有3个向量,向量数相同 对于y1,我想将x分成两个子列表,其中第一个子列表包含2个向量,第二个子列表包含4个向量 我试过这个: > z <- split(x, y[1])) 基
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
的值拆分x
。例如
对于y
,我想将x
分成两个子列表,每个子列表中有3个向量,向量数相同
对于y1
,我想将x
分成两个子列表,其中第一个子列表包含2个向量,第二个子列表包含4个向量
我试过这个:
> z <- split(x, y[1]))
基于y1
:
sublist_1 = list(x1, x2).
sublist_2= list(x1, x2, x3, x4).
需要帮助吗?我们可以使用
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
split_list非常感谢您的大力帮助。你能帮助我理解为什么我们在rep
中使用c(1,2)
吗。对于y
@Maryam的第一个和第二个元素,这是因为我们需要将列表拆分为两个列表。检查rep(c(1,2),y)
和rep(c(1,2),y1)
的输出以了解列表是如何分割的。
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