我有一个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
}
希望这很清楚!
在此先感谢您的帮助,
安迪
答案 0 :(得分:0)
您可以使用list.sort
软件包的rlist
函数轻松地做到这一点:
rlist::list.sort(example, m.group, (att))
用att
括起来的括号表示您想要降序。