MATLAB用到一些函数及代码。
将X的各个元素按递增(递减)顺序排序。
X = [3 7 5 0 4 2];
[X1,IX]=sort(X)
%%%%%%%%% 结果如下:%%%%%%%%%%%%%%%%
X1 =
0 2 3 4 5 7
IX =
4 6 1 5 3 2
X1为排序后的X序列:IX为IX中每个元素在X中对应的位置。
删除X中重复的元素,同时对新得到数列进行排序。
a = [9 9 9 9 9 9 8 8 8 8 7 7 7 6 6 6 5 5 4 2 1];
[c1,ia1,ic1] = unique(a)
% returns
c1 = [1 2 4 5 6 7 8 9]
ia1 = [21 20 19 17 14 11 7 1]'
ic1 = [8 8 8 8 8 8 7 7 7 7 6 6 6 5 5 5 4 4 3 2 1]'
其中,c1为删除重复元素后的排序结果,ia1,ic1为标记向量,满足 c1 = a(ia1) and a = c1(ic1)。
[c2,ia2,ic2] = unique(a,'stable')
% returns
c2 = [9 8 7 6 5 4 2 1]
ia2 = [1 7 11 14 17 19 20 21]'
ic2 = [1 1 1 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 6 7 8]'
stable的作用是c2与ia2一一对应。
类似的last命令如下(默认为first),
A=[1 2 3 1 2;4 5 6 4 5]
[C,IA,IC] = unique(A,'last')
% returns
C=[ 1 2 3 4 5 6]'
IA=[7 9 5 8 10 6]'
IC=[1 4 2 5 3 6 1 4 2 5]'
%如果改成默认的first
[C,IA,IC] = unique(A,'first')
C=[ 1 2 3 4 5 6]' %同last
IA=[1 3 5 2 4 6]'
IC=[1 4 2 5 3 6 1 4 2 5]' %同last
注意,IA中为A中最后一次出现元素所在的位置,如C=1,对应A中的第7个元素,即最后一个1出现的位置。
tie的中文术语CNKI翻译助手没找到(打平?),大致意思是向量中排序符号的方式,尤其是数列中具有相同的元素。该函数计算了向量X中每个元素的排序,如果任何X值是并列的,tiedrink计算它们的平均排名。
[R,TIEADJ] = tiedrink (X,1)
R为向量X中值的rank,TIEADJ是计算Kendall’s tau所需的领带的三个调整向量。tiedrunk (X,0)和tiedrunk (X)是等效的。
同MATLAB差别不大,详见 ?sort。
sort(x, decreasing = FALSE, na.last = NA, ...)
函数的表达形式如下,
rank(x, na.last = TRUE,
ties.method = c("average", "first", "last", "random", "max", "min"))
x 为数据向量,na.last对x中NA值的处理方法。重点介绍下ties.method这个选项。
first—表示得到的索引为递增(不重复)序列。通过下面的例子可以看出重复的元素都有一个独一无二的序号。
a<-c(2,0,2,1,2,1)
rank(a,ties.method = "first")
#输出结果
#[1] 4 1 5 2 6 3
first—表示得到的索引为递减(不重复)序列。同时可注意到a中重复元素的秩序与上边不同,第一个出现的2,秩序为6。
> rank(a,ties.method = "last")
#[1] 6 1 5 3 4 2
同理,average 、max、min的计算结果可参考下边的例子。
> rank(a,ties.method = "average")
#[1] 5.0 1.0 5.0 2.5 5.0 2.5
> rank(a,ties.method = "max")
#[1] 6 1 6 3 6 3
> rank(a,ties.method = "min")
#[1] 4 1 4 2 4 2
rank() 和 tiedrank() 函数都默认 averages作为rank ties 。举例[10 20 30 40 20] 带入这两个函数后 的结果均为[1.0 2.5 4.0 5.0 2.5] 。
总的来说,R语言的函数更加丰富一些,实现的功能也较MATLAB齐全。
【1】https://stackoverflow.com/questions/46961068/matlab-equivalent-of-the-r-function-rank
【2】https://ww2.mathworks.cn/help/matlab/ref/unique.html?s_tid=srchtitle
【3】https://ww2.mathworks.cn/help/stats/tiedrank.html?s_tid=doc_ta