我是R的新手,我发现它非常有趣。
我有MATLAB代码,可以根据顺序对矢量进行排序。现在我想将它转换为R代码,这是一个典型的带有关系的spearman排名:
# 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&lt; - drank(x)
结果:
r = 5, 1.5, 6.5, 3, 8, 6.5, 1.5, 4
1.5
是8.2
出现两次的平均值,即。领带
6.5
是11.3
出现两次的平均值
任何人都可以帮我查一下吗?
谢谢,
答案 0 :(得分: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