重新排列矢量的元素从1到矢量的长度

重新排列矢量的元素从1到矢量的长度

问题描述:

我已经写了一个R函数,它将一个矢量作为输入并返回另一个矢量作为输出,以便输入矢量的最小值被1代替,元素大于最小值的值被2等取代,直到矢量的最大值,该矢量被矢量的长度代替。这是我的功能:重新排列矢量的元素从1到矢量的长度

resc<-function(x){ 
    m<-length(unique(x)) 
    nor<-rep(0,length(x)) 
    x_2<-x 
    for(i in 1:m){ 
    temp<-min(x_2) 
    temp_2<-which(x==temp) 
    nor[temp_2]<-i 
    x_2<-x_2[-which(x_2==temp)] 
    } 
    return(nor) 
} 

我该如何在Python中重写这个函数?我试过了,但是我对使用命令'which'有点困惑。

+4

对于它的价值,该功能已经存在于R和它的'rank'。不知道Python足以说明如何翻译。 – nicola

+1

对于R,你可以使用'rank',它给你的向量中的元素的等级和python可能[使用Python/NumPy排列数组中的项目](http://stackoverflow.com/questions/5284646/rank -items-in-an-an-an-array-using-python-numpy) –

+1

谢谢你在R语言中的直觉@nicola和@Ronak! 我想这就是我要找的! –

正如Ronak和Nicola所说的,您只需要使用rank函数即可获得相同的结果。

在Python,我会尝试:

import scipy.stats as ss 
ss.rankdata([array])