Assign Ranking in Matlab

2 ビュー (過去 30 日間)
Maria
Maria 2014 年 6 月 26 日
コメント済み: Maria 2014 年 6 月 26 日
I have several cell-type variables A{Y,1}(Z x 13 cells) all sorted by column C. I need to assign a ranking (add column R) for the corresponding sorting order.
Example for a B {Y,1} (8 x 3 cells). My original cell is:
A B C
MJ 65 0
MJ 321 0,0125
MJ 2 0,0125
MJ 1987 0,0125
MJ 87 0,02
MJ 5 0,0375
MJ 743 0,0375
MJ 124 0,05
I would like to rank (column R) each A{Y,1} cell-type, considering that in case of tie, the mean value should be assigned.
A B C R
MJ 65 0 1
MJ 321 0,0125 3 %Assign mean value
MJ 2 0,0125 3
MJ 1987 0,0125 >> 3
MJ 87 0,02 5
MJ 5 0,0375 6,5 %Assign mean value
MJ 743 0,0375 6,5
MJ 124 0,05 8
Thanks for your help.
  10 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2014 年 6 月 26 日
Assign mean values of what?
Maria
Maria 2014 年 6 月 26 日
When doing the ranking, if you have in column C 3 values that are equal, you assign the mean value to each one. Meaning in this case the mean value of 2,3 and 4 is 3 (for rows 2, 3 and 4). The mean value of 6 and 7 is 6,5. This way i get a fair ranking.

サインインしてコメントする。

採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2014 年 6 月 26 日
v={'MJ' 65 0
'MJ' 321 0.0125
'MJ' 2 0.0125
'MJ' 1987 0.0125
'MJ' 87 0.02
'MJ' 5 0.0375
'MJ' 743 0.0375
'MJ' 124 0.05}
[a,b,c]=unique([v{:,3}])
d=accumarray(c,(1:numel(c))',[],@mean)
v(:,4)=num2cell(d(c))
  6 件のコメント
Maria
Maria 2014 年 6 月 26 日
it adds to V{1,1} (27x13 cell) a 14th column with the ranking! But I have until V{2000,1}. And I tried different ways and still not working! I will continue trying!
Maria
Maria 2014 年 6 月 26 日
I am not being able to attach mat file, I am attaching a pdf file. With the code and two images. Hope it's ok.

サインインしてコメントする。

その他の回答 (1 件)

Joseph Cheng
Joseph Cheng 2014 年 6 月 26 日
Well we first start with finding which ones are the same.
C = [0 .0125 .0125 .0125 .02 .0375 .0375 .05];
R = 1:length(C)
dC = diff(C);
eRank = find(dC ==0);
eRank = unique([eRank eRank+1]);
With eRank i have isolated the same valued C values. Now to see which ones are grouped together.
eRankSpacing = [0 find(diff(eRank)>1) length(eRank)]
Now to substitute the averages of the consecutive same value ranks.
for i =1:length(eRankSpacing)-1
tempave = mean(eRank(eRankSpacing(i)+1:eRankSpacing(i+1)));
R(eRank(eRankSpacing(i)+1:eRankSpacing(i+1)))=tempave
end
  7 件のコメント
Maria
Maria 2014 年 6 月 26 日
I am trying it! Thanks :)
Joseph Cheng
Joseph Cheng 2014 年 6 月 26 日
how about breaking it out of the cells and put them into arrays. Then putting them back? Not optimal but doable? I like Azzi's method but sometimes the long (non-built in function) way gets you thinking how these things are performed.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by