Assign Ranking in Matlab
Ältere Kommentare anzeigen
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 Kommentare
Azzi Abdelmalek
am 26 Jun. 2014
This is not clear
Maria
am 26 Jun. 2014
Maria
am 26 Jun. 2014
Azzi Abdelmalek
am 26 Jun. 2014
How did you get the ranking?
Maria
am 26 Jun. 2014
Maria
am 26 Jun. 2014
Azzi Abdelmalek
am 26 Jun. 2014
I can't understand what you want
Maria
am 26 Jun. 2014
Azzi Abdelmalek
am 26 Jun. 2014
Assign mean values of what?
Maria
am 26 Jun. 2014
Akzeptierte Antwort
Weitere Antworten (1)
Joseph Cheng
am 26 Jun. 2014
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 Kommentare
Joseph Cheng
am 26 Jun. 2014
I left it without doing it inside cells just so it appears clear on what was done without the added complexity of dealing with cells.
Maria
am 26 Jun. 2014
Joseph Cheng
am 26 Jun. 2014
Bearbeitet: Joseph Cheng
am 26 Jun. 2014
I think it may be C = B{:,1}(:,9)
such that
X = [{magic(3)},{magic(5)},{magic(10)}]
Y = [{X}, {X},{X}];
I need to call
Y{3}{2}(:,1)
to get 3rd cell of Y then 2nd cell within that one then all rows from column 1.
which should give me a 5x1 (in this example of magic)
Maria
am 26 Jun. 2014
Joseph Cheng
am 26 Jun. 2014
Well maybe Azzi's solution will work.
Maria
am 26 Jun. 2014
Joseph Cheng
am 26 Jun. 2014
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.
Kategorien
Mehr zu Shifting and Sorting Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!