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

时间:2019-04-17 11:43:42

标签: r sorting nested-lists

我有一个n个元素的嵌套列表,每个元素本身就是4个不同值的列表。值各不相同,但元素之间具有可比性。

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

我可以使用'm.group'或'att'的升序或降序排列列表

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

} 

希望这很清楚!

在此先感谢您的帮助,

安迪

1 个答案:

答案 0 :(得分:0)

您可以使用list.sort软件包的rlist函数轻松地做到这一点:

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

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