我想知道如何以增加的方式对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
答案 0 :(得分:1)
去那里:
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)
将获得您想要的输出
答案 1 :(得分:0)
这些列表是否总是这样?我的意思是...就像一个序列吗?
对于这种特殊情况,您只需要每个列表中的代表号码,然后可以按如下顺序进行排列:
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
您正在寻找什么吗?