如何按第一个元素对列表进行排序

时间:2014-01-19 15:07:01

标签: r list

我有一个类似的矢量列表:

[[1]]
[1] 2 1.0 3.0

[[2]]
[1] 3 3 3

[[3]]
[1] 1 3.0 1.0

我希望它按每个向量的第一个元素按递减顺序排序,如下所示:

[[1]]
[1] 3 3 3

[[2]]
[1] 2 1.0 3.0    

[[3]]
[1] 1 3.0 1.0

我正在寻找一个看起来像(当然它不起作用)的解决方案:

list.sortby(function (x) x[1])

3 个答案:

答案 0 :(得分:2)

我假设您的示例不应该导致将列表的第二个元素放在结果的第一个元素中?如果这是正确的,您可以使用lapply执行您想要的操作:

L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
L
lapply(L, sort)

如果按照列表的每个向量中的第一个值进行排序,则可以通过以下方式完成此操作:

L[order(sapply(L, function(x) x[1], simplify=TRUE), decreasing=TRUE)]

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

[[2]]
[1] 2 1 3

[[3]]
[1] 1 3 1

从您的示例中,您看起来想要降序。

答案 1 :(得分:1)

与@MarkintheBox类似。

L <- list(c(2,1,3), c(3,3,3), c(1,3,1))

L[order(sapply(L,head,1),decreasing=T)]
# [[1]]
# [1] 3 3 3
# 
# [[2]]
# [1] 2 1 3
# 
# [[3]]
# [1] 1 3 1

答案 2 :(得分:0)

与其他人相同,但使用Map提取每个向量的第一个元素。

L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
idx <- as.numeric(Map(function(vec){vec[1]},L))
L[order(idx, decreasing=TRUE)]
相关问题