我想对列表的元素进行排名,使得具有相同值的元素也获得相同的排名:
list = {1, 2, 3, 4, 4, 5}
期望的输出:
ranks = {5, 4, 3, 2, 2, 1}
Ordering[]
几乎可以完成我想要的操作,但会为列表中4
的两个实例指定不同的等级。
答案 0 :(得分: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}