Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据r中另一个向量的值将向量列表拆分为子列表_R - Fatal编程技术网

如何根据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