【问题标题】:Sorting a list of lists based on the third element根据第三个元素对列表列表进行排序
【发布时间】:2017-12-04 14:17:33
【问题描述】:

我有一个对象名称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 进行排序,以使较大的值位于顶部。

提前致谢。

【问题讨论】:

标签: r sorting


【解决方案1】:

1) 挑选出第三个元素,获取它们的顺序并以此为列表下标:

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

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

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

【讨论】:

  • sapply 似乎可以解决问题,而且又好又短。但感谢您也提供了另一种方法。谢谢。
【解决方案2】:

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

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

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]

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 2011-05-21
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多