如何使用 R 中的两个列表元素对嵌套列表进行排序?



我有一个包含n个元素的嵌套列表,每个元素本身就是4个不同值的列表。这些值各不相同,但在元素之间是可比较的。

我需要先按"m.group"的值对列表进行排序,然后按值"att"对列表进行排序。"m.group"是一个整数,比如说,1:3,列表中的每个元素都被分配一个1:3的值(尽管总数会有所不同)。在每个编号的组中,我需要按"att"的降序排列成员,可以是 0 到 2 之间的任何值。

我可以使用

function(a, field) a[order(sapply(a, "[[", i = field),decreasing = T)]

但我无法弄清楚如何将两者结合起来。

每个元素如下所示。

[[1]]
[[1]]$`ind`
[1] 1
[[1]]$m.group
[1] 3
[[1]]$offspring
[1] 0
[[1]]$att
[1] 0.07626772

在这个阶段,"后代"和"ind"这两个值并不重要。

为了简化起见,我需要一个如下所示的输出:

[[1]]
[[1]]$m.group
[1] 1
[[1]]$att
[1] 1.49352456

[[2]]
[[2]]$m.group
[1] 1
[[2]]$att
[1] 1.23452221

[[3]]
[[3]]$m.group
[1] 1
[[3]]$att
[1] 0.07626772

[[4]]
[[4]]$m.group
[1] 2
[[4]]$att
[1] 1.51852546
[[5]]
[[5]]$m.group
[1] 2
[[5]]$att
[1] 1.35648527

等。

编辑

您可以使用以下循环生成类似的列表:

example <-vector(mode="list", length = 40)
loop.nb<-1
j<-1
for(j in 1:40){
example[[loop.nb]]$m.group <-sample((round(80/(10*2))),1)
example[[loop.nb]]$att <- runif(1, min=0, max=1.7)
loop.nb <-loop.nb+1
} 

希望这是清楚的!

提前感谢您的帮助,

安 迪

您可以使用rlist包的list.sort函数轻松完成此操作:

rlist::list.sort(example, m.group, (att))

括起来的括号att表示您需要降序。

最新更新