簡體   English   中英

如何根據r中另一個向量的值將向量列表拆分為子列表

[英]How to split a list of vectors into sublist based on a values of another vector in 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使得:

 y <- c(3,3)
 y1 <- c(2,4)

我想根據yy1的值拆分x 例如,對於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).

請問有什么幫助嗎?

我們可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM