How to sort table rows using custom (i.e. custom) sort orders for some sort columns?
For example, the following figure shows the output sortrowscontaining standard sort orders for all sort columns:
>> sortrows(A, {'TrafficLight', 'Suit', 'Parity'})
ans =
Parity TrafficLight Suit order prevalence
______ ____________ ________ _____ __________
even 'green' hearts 49 0.5025
even 'green' hearts 64 0.5318
even 'green' hearts 67 0.7896
odd 'green' hearts 4 0.6374
odd 'green' hearts 11 0.3354
odd 'green' hearts 59 0.8644
even 'green' spades 35 0.6674
odd 'green' spades 64 0.4348
even 'red' diamonds 69 0.5751
even 'red' diamonds 77 0.6318
even 'red' diamonds 89 0.2629
even 'red' diamonds 92 0.2596
even 'red' diamonds 98 0.3578
odd 'red' diamonds 69 0.2911
odd 'red' diamonds 74 0.3343
even 'red' hearts 19 0.5695
odd 'red' hearts 51 0.9122
even 'red' spades 38 0.9837
odd 'red' spades 22 0.5587
even 'yellow' clubs 22 0.6917
odd 'yellow' diamonds 1 0.2064
odd 'yellow' diamonds 25 0.8257
odd 'yellow' spades 33 0.2653
odd 'yellow' spades 38 0.2549
But suppose I want the sort order for the values โโto TrafficLightbe
'red' < 'yellow' < 'green'
value for Suitshould be
diamonds < hearts < clubs < spades
but for Paritythat will remain the one that is.
How can I reorder strings Aso that the new ordering reflects these custom sort orders?
(, , , sortrows, 'TrafficLight' < 'Suit' < 'Parity'.)
PS: A:
kvs = {'Parity', 'TrafficLight', 'Suit'};
A = cell2table({
'odd', 'yellow', 'diamonds', 1, 0.2064;
'odd', 'green', 'hearts', 4, 0.6374;
'odd', 'green', 'hearts', 11, 0.3354;
'even', 'red', 'hearts', 19, 0.5695;
'even', 'yellow', 'clubs', 22, 0.6917;
'odd', 'red', 'spades', 22, 0.5587;
'odd', 'yellow', 'diamonds', 25, 0.8257;
'odd', 'yellow', 'spades', 33, 0.2653;
'even', 'green', 'spades', 35, 0.6674;
'even', 'red', 'spades', 38, 0.9837;
'odd', 'yellow', 'spades', 38, 0.2549;
'even', 'green', 'hearts', 49, 0.5025;
'odd', 'red', 'hearts', 51, 0.9122;
'odd', 'green', 'hearts', 59, 0.8644;
'even', 'green', 'hearts', 64, 0.5318;
'odd', 'green', 'spades', 64, 0.4348;
'even', 'green', 'hearts', 67, 0.7896;
'even', 'red', 'diamonds', 69, 0.5751;
'odd', 'red', 'diamonds', 69, 0.2911;
'odd', 'red', 'diamonds', 74, 0.3343;
'even', 'red', 'diamonds', 77, 0.6318;
'even', 'red', 'diamonds', 89, 0.2629;
'even', 'red', 'diamonds', 92, 0.2596;
'even', 'red', 'diamonds', 98, 0.3578
}, 'VariableNames', ...
[kvs {'order', 'prevalence'}]);
A.Parity = categorical(A.Parity);
A.Suit = categorical(A.Suit);