Как переупорядочить несколько списков (не их элементов) в порядке возрастания в Base R - PullRequest
0 голосов
/ 29 января 2019

Мне было интересно, как переупорядочить 3 разных списка (т. Е. списки не делятся друг с другом каким-либо элементом ) возрастающим образом?

Например, в выходных данныхниже я хочу, чтобы весь второй список занял позицию первого списка, а третий список занял позицию второго списка и т. д.

PS Моя цель - достичьструктура функции / цикла для изменения порядка любого количества списков.

x = list(20:46, 3:7, 6:9)
x[-1] <- Map(setdiff, x[-1], x[-length(x)])
x

# output:

[[1]]    ## FIRST LIST
 [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

[[2]]    ## SECOND LIST
 [1] 3 4 5 6 7

[[3]]   ## THIRD LIST
 [1] 8 9

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Эти списки всегда такие?Я имею в виду ... как последовательность?

Для этого конкретного случая вам нужен только репрезентативный номер из каждого списка, а затем вы можете расположить его в следующем порядке:

x = list(20:46, 3:7, 6:9)
x[-1] <- Map(setdiff, x[-1], x[-length(x)])
x

require(dplyr)
sapply(x, max) %>% order %>% x[.]

[[1]]
[1] 3 4 5 6 7

[[2]]
[1] 8 9

[[3]]
 [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

это то, что вы ищете?

0 голосов
/ 30 января 2019

Итак:

reorder <- function(x){
 mins <- sapply(x, min) 
 aux=list()
 i=1
 while (length(mins)>0) {
   aux[[i]] <- x[[which.min(mins)]]
   x <- x[-which.min(mins)]
   mins <- mins[-which.min(mins)]
   i=i+1
 }
return(aux)
}

функция перестроит ваш список по наименьшему числу векторов.

например:

x <- reorder(x)

получите желаемый результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...