[英]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)
我想根據y
和y1
的值拆分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.