如何按每个子列表的最大值对列表进行排序?

时间:2018-01-05 17:01:33

标签: r

我有一个包含powerset的列表:

> str(ps10)
List of 1023
 $ : int 1
 $ : int 2
 $ : int [1:2] 1 2
 $ : int 3
 $ : int [1:2] 1 3
 $ : int [1:2] 2 3
 $ : int [1:3] 1 2 3
...

如何通过内部列表中的某些统计信息(例如分钟,中位数等)对外部列表进行排序?使用HapEstXXR::powerset().按最大内部元素排序创建列表我希望保留列表结构供以后使用。

sortsort.listorder不接受列表。在SAS中,我会将统计信息作为另一列添加到数据集中,并通过list.statistic,list id,list elements调用PROC SORT。我还没有想出如何在R中有效地做到这一点,而没有创建辅助向量来获得排序。

由于

2 个答案:

答案 0 :(得分:4)

如果L是定义为L <- list(c(1,2), c(1,3), c(2,5), c(1,4))的列表,那么您可以使用:

L[order(-sapply(L, max))]

说明:

  • sapply(L, max)获取L
  • 中每个项目的最大值
  • order内加一个减号,可以得到以最大值最高的元素开头的元素(递减)顺序。
  • 将其置于方括号之间,按所需顺序重新排序L

答案 1 :(得分:1)

假设您有以下列表,并且您希望根据最大元素逐渐对其进行排序。

L = list(c(1), c(1,2), c(1,4), c(2,5))

因此,在这种情况下,订单将是4,3,2,1。

如果我理解你的问题,你可以简单地遍历列表,然后使用命令:

maxArray = rep(NA, length(L)) for(i in 1:length(L)) { maxArray[i] = max(L[[i]]) } order(maxArray, decreasing = TRUE)

将正确返回[1] 4 3 2 1