根据第三个元素对列表列表进行排序

时间:2017-12-04 14:17:34

标签: r sorting

我有一个对象名x,它是一个包含内部列表的列表。

`x$population`

output
[[1]]
[[1]][[1]]
[1] 1

[[1]][[2]]
[1] 11

[[1]][[3]]
[1] 1


[[2]]
[[2]][[1]]
[1] 1

[[2]][[2]]
[1] 20

[[2]][[3]]
[1] 2

我希望能够根据第三个元素对列表进行排序: x$population[[2]][[3]]但我不知道该怎么做。

我不知道如何开始这样做,而不是得到一些重新创建问题的模拟代码:

z <- list() 

z[[1]] <- list(1, 10, 0.5) 
z[[2]] <- list(1, 10, 0.87) 

我将如何根据每个列表的第三个元素(0.5,0.87)对z进行排序,以使较大的值位于顶部。

提前致谢。

2 个答案:

答案 0 :(得分:4)

1)选出第三个元素,按顺序获取他们的顺序和下标:

z[order(sapply(z, "[[", 3))]

2)另一种方法是将数据表示为矩阵a,然后对其进行排序:

a <- sapply(z, unlist)
a[, order(a[3, ])]

答案 1 :(得分:1)

明确地做:我将提取第三个元素并对其进行排序。

我创建了一个更复杂的列表:

z <- list() 

z[[1]] <- list(1, 10, 0.5) 
z[[2]] <- list(1, 10, 0.87) 
z[[3]] <- list(1, 10, 0.2) 

我提取每个元素的第三个元素:

thirdelt <- sapply(z, function(x)x[[3]])

然后我对它进行排序:

thirdelt_order <- order(thirdelt)

最后我申请了:

z <- z[thirdelt_order]