2014-11-22 33 views
0

我是新來的R,我覺得它很有趣。根據訂單排序矢量和平均在R

我有MATLAB代碼來排序基於秩序的工作正常。現在我想將其轉換爲R代碼裏面,一個典型的斯皮爾曼與領帶排名:

# MATLAB CODE 

function r=drank(x) 

u = unique(x); 
[xs,z1] = sort(x); 
[z1,z2] = sort(z1); 
r = (1:length(x))'; 
r=r(z2); 

for i=1:length(u) 

    s=find(u(i)==x); 

    r(s,1) = mean(r(s)); 

end 

這是我的嘗試:

# R CODE 

x = c(10.5, 8.2, 11.3, 9.1, 13.0, 11.3, 8.2, 10.1) 

drank <- function(x){ 

    u = unique(x) 
    xs = order(x) 
    r=r[xs] 

    for(i in 1:length(u)){ 
     s=which(u[i]==x) 
     r[i] = mean(r[s]) 
    } 

    return(r) 
} 

[R < - 喝(x)的

結果:

r = 5, 1.5, 6.5, 3, 8, 6.5, 1.5, 4 

1.58.2平均發生兩次即領帶

6.5是平均11.3發生兩次

誰能幫我查一下嗎?

感謝,

+0

請張貼樣本數據和預期的結果。另外,用文字描述這個功能應該做什麼。 – Andrie 2014-11-22 15:39:30

+0

@Andrie我發佈了一個示例謝謝。 – aliocee 2014-11-22 16:08:19

+0

您應該在發佈之前完成SO的搜索;這個搜索策略提供了4個點擊與第一個Q回答你的Q:'秩序連接平均[r]' – 2014-11-22 20:16:01

回答

3

R具有在排名內置的功能,稱爲rank()和它給你正在尋找正是爲:

x = c(10.5, 8.2, 11.3, 9.1, 13.0, 11.3, 8.2, 10.1) 
expected <- c(5, 1.5, 6.5, 3, 8, 6.5, 1.5, 4) 

rank(x) 
# [1] 5.0 1.5 6.5 3.0 8.0 6.5 1.5 4.0 

identical(expected, rank(x)) 
# [1] TRUE 
+0

謝謝你。我可以看到函數定義嗎? – aliocee 2014-11-22 16:22:36

+0

是的。在你的控制檯輸入'rank'。您可以通過這種方式查看任何函數的代碼。 – Andrie 2014-11-22 16:26:10

+0

完美謝謝你,一切設置。 – aliocee 2014-11-22 16:31:20