Community Trekker

Joined:

Jun 9, 2017

Ranking in opposite order

Is there any way to use the Ranking function, but where the largest value gets assigned a 1? For example:

The code below, returns [3, 5, 4, 1, 2]. However, I would like it to return [3, 1, 2, 5, 4]

Ranking( [3, 6, 5, 0, 1] );

2 ACCEPTED SOLUTIONS

Accepted Solutions

Super User

Joined:

Jun 22, 2012

Solution

Re: Ranking in opposite order

Here is a quick and dirty way to do it

``````Names Default To Here( 1 );
a = [3, 6, 5, 0, 1];
Show( Ranking( (Max( a ) + 1) - a; ) );``````

Ranking((Max(a) + 1) - a) = [3, 1, 2, 5, 4];

Jim

Staff

Joined:

Jun 23, 2011

Solution

Re: Ranking in opposite order

I very much like Jim's solution. But I am lazy so I put the matrix and the list to work and make them carry the heavy load.

``````x = J( 10, 1, Random Normal() );

Reverse Rank = Function( { x }, { ranks },
ranks = Rank( x );
Matrix( Reverse( As List( ranks ) ) );
);

rev rank = Reverse Rank( x );

Show( x, rev rank );``````
Learn it once, use it forever!
2 REPLIES

Super User

Joined:

Jun 22, 2012

Solution

Re: Ranking in opposite order

Here is a quick and dirty way to do it

``````Names Default To Here( 1 );
a = [3, 6, 5, 0, 1];
Show( Ranking( (Max( a ) + 1) - a; ) );``````

Ranking((Max(a) + 1) - a) = [3, 1, 2, 5, 4];

Jim

Staff

Joined:

Jun 23, 2011

Solution

Re: Ranking in opposite order

I very much like Jim's solution. But I am lazy so I put the matrix and the list to work and make them carry the heavy load.

``````x = J( 10, 1, Random Normal() );

Reverse Rank = Function( { x }, { ranks },
ranks = Rank( x );
Matrix( Reverse( As List( ranks ) ) );
);

rev rank = Reverse Rank( x );

Show( x, rev rank );``````
Learn it once, use it forever!