我有一个包含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
表示您需要降序。