Как разбить список векторов на подсписок на основе значений другого вектора в r - PullRequest
0 голосов
/ 13 ноября 2018

Предположим, у меня есть список векторов 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).

Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 13 ноября 2018

Мы можем использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...