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

7

我有一个向量列表,形式如下:

[[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个回答

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
类似于@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

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)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接