2016-12-05 69 views
-2

我已經寫了一個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! 我想這就是我要找的! –

回答

1

正如Ronak和Nicola所說的,您只需要使用rank函數即可獲得相同的結果。

在Python,我會嘗試:

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