1

我想对列表的元素进行排名,以使具有相同值的元素也获得相同的排名:

list = {1, 2, 3, 4, 4, 5}

所需的输出:

ranks = {5, 4, 3, 2, 2, 1}

Ordering[]几乎做了我想要的,但为4列表中的两个实例分配了不同的等级。

4

1 回答 1

1

我不确定我是否涵盖了您想到的所有内容,但以下代码将提供所需的输出。它假定最小值是最高等级,并且应该与数值一起使用,或者只要您对 Mathematica 的标准排序顺序没问题。局部变量 dv 是“不同值”的简称。

  FromListToRanks[k_List]:= Module[ {dv=Reverse[Union[k]]},
    k /. Thread[dv -> Range[Length[dv]]] ]


  FromListToRanks[list]

  {5,4,3,2,2,1}
于 2013-04-05T19:45:29.190 回答