Hi, I cannot understand why rank(x) behaves as outlined below. Based on the results of first x vector values ranking, which is as expected in my opinion, I cannot explain the following results.> x <- c(12,34,15,77,78) > x[rank(x)][1] 12 15 34 77 78 (OK)> x <- c(12,34,15,77,78,22) > x[rank(x)][1] 12 77 34 78 22 15 (?)> x <- c(12,34,77,15,78) > x[rank(x)][1] 12 77 15 34 78 (?) Please any feedback ? Thanks. BR, Giorgio Garziano [[alternative HTML version deleted]]
On 26/04/15 20:17, Giorgio Garziano wrote:> Hi, > > I cannot understand why rank(x) behaves as outlined below. Based on > the results of first x vector values ranking, which is as expected in > my opinion, I cannot explain the following results. > >> x <- c(12,34,15,77,78) >> x[rank(x)] > [1] 12 15 34 77 78 (OK) > >> x <- c(12,34,15,77,78,22) >> x[rank(x)] > [1] 12 77 34 78 22 15 (?) > >> x <- c(12,34,77,15,78) >> x[rank(x)] > [1] 12 77 15 34 78 (?) > > Please any feedback ? Thanks.What did you expect to get? To take your 2nd example: x <- c(12,34,15,77,78,22) x[rank(x)] [1] 12 77 34 78 22 15 (?) Why (?) ? The rank of 12 is 1. The rank of 34 is 4. The rank of 15 is 2. The rank of 77 is 5. The rank of 78 is 6. The rank of 22 is 3. Thus x[rank(x)] gives you the 1st, 4th, 2nd, 5th, 6th and 3rd entries of x. In that order. What on earth is puzzling you? I can think of no good reason for ever looking at x[rank(x)]. Perhaps, judging from your first example which you say is "OK", you want x[order(x)]. cheers, Rolf Turner -- Rolf Turner Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276 Home phone: +64-9-480-4619
Hi You want to use order. rank gives you position of x according their values.> x <- c(12,34,15,77,78,22)> rank(x)[1] 1 4 2 5 6 3 order gives you sorting vector to get your values in ascending or descending order.> order(x)[1] 1 3 6 2 4 5> x[order(x)][1] 12 15 22 34 77 78 You can see it as as first element 12 is selected - 1 as second element 15 is selected - 3 as third element 22 is selected - 6 ... Cheers Petr> -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Giorgio > Garziano > Sent: Sunday, April 26, 2015 10:18 AM > To: r-help at r-project.org > Subject: [R] Question about base::rank results > > Hi, > > I cannot understand why rank(x) behaves as outlined below. > Based on the results of first x vector values ranking, which is as > expected in my opinion, I cannot explain the following results. > > > x <- c(12,34,15,77,78) > > x[rank(x)] > [1] 12 15 34 77 78 (OK) > > > x <- c(12,34,15,77,78,22) > > x[rank(x)] > [1] 12 77 34 78 22 15 (?) > > > x <- c(12,34,77,15,78) > > x[rank(x)] > [1] 12 77 15 34 78 (?) > > Please any feedback ? Thanks. > > BR, > > Giorgio Garziano > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code.________________________________ Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m. Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu. Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat. Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu. V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?: - vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu. - a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou. - trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech. - odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?. This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients. If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system. If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner. The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email. In case that this e-mail forms part of business dealings: - the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning. - if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation. - the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects. - the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.
Ok. Thanks for your explanation. Cheers, Giorgio Garziano -----Original Message----- From: Rolf Turner [mailto:r.turner at auckland.ac.nz] Sent: luned? 27 aprile 2015 09:24 To: Giorgio Garziano; r-help at r-project.org Subject: Re: [R] Question about base::rank results On 26/04/15 20:17, Giorgio Garziano wrote:> Hi, > > I cannot understand why rank(x) behaves as outlined below. Based on > the results of first x vector values ranking, which is as expected in > my opinion, I cannot explain the following results. > >> x <- c(12,34,15,77,78) >> x[rank(x)] > [1] 12 15 34 77 78 (OK) > >> x <- c(12,34,15,77,78,22) >> x[rank(x)] > [1] 12 77 34 78 22 15 (?) > >> x <- c(12,34,77,15,78) >> x[rank(x)] > [1] 12 77 15 34 78 (?) > > Please any feedback ? Thanks.What did you expect to get? To take your 2nd example: x <- c(12,34,15,77,78,22) x[rank(x)] [1] 12 77 34 78 22 15 (?) Why (?) ? The rank of 12 is 1. The rank of 34 is 4. The rank of 15 is 2. The rank of 77 is 5. The rank of 78 is 6. The rank of 22 is 3. Thus x[rank(x)] gives you the 1st, 4th, 2nd, 5th, 6th and 3rd entries of x. In that order. What on earth is puzzling you? I can think of no good reason for ever looking at x[rank(x)]. Perhaps, judging from your first example which you say is "OK", you want x[order(x)]. cheers, Rolf Turner -- Rolf Turner Technical Editor ANZJS Department of Statistics University of Auckland Phone: +64-9-373-7599 ext. 88276 Home phone: +64-9-480-4619
There is a blog post on this topic: http://www.portfolioprobe.com/2012/07/26/r-inferno-ism-order-is-not-rank/ Pat On 26/04/2015 09:17, Giorgio Garziano wrote:> Hi, > > I cannot understand why rank(x) behaves as outlined below. > Based on the results of first x vector values ranking, which is as expected in my opinion, > I cannot explain the following results. > >> x <- c(12,34,15,77,78) >> x[rank(x)] > [1] 12 15 34 77 78 (OK) > >> x <- c(12,34,15,77,78,22) >> x[rank(x)] > [1] 12 77 34 78 22 15 (?) > >> x <- c(12,34,77,15,78) >> x[rank(x)] > [1] 12 77 15 34 78 (?) > > Please any feedback ? Thanks. > > BR, > > Giorgio Garziano > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Apologies if this belabors the point, but let's look at your second example to see why order and rank are different:> x <- c(12,34,15,77,78,22) > names(x) <- 1:6 > x1 2 3 4 5 6 12 34 15 77 78 22 I've added names to the values so we can watch how they change. If we sort the numbers we get them in increasing order with their original indices:> sort(x)1 3 6 2 4 5 12 15 22 34 77 78 The values in are order and the names show where each value came from originally. That sequence of index values is exactly what order(x) gives you:> order(x)[1] 1 3 6 2 4 5> x[order(x)]1 3 6 2 4 5 12 15 22 34 77 78 The rank function gives you the relative size of the value, not its position in the original vector:> rank(x)1 2 3 4 5 6 1 4 2 5 6 3> x[rank(x)]1 4 2 5 6 3 12 77 34 78 22 15 The second value has rank 4, but that is not its index which is 2. The value with index 4 is 77 so it shows up in the second position. ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of J Robertson-Burns Sent: Monday, April 27, 2015 2:34 PM To: Giorgio Garziano; r-help at r-project.org Subject: Re: [R] Question about base::rank results There is a blog post on this topic: http://www.portfolioprobe.com/2012/07/26/r-inferno-ism-order-is-not-rank/ Pat On 26/04/2015 09:17, Giorgio Garziano wrote:> Hi, > > I cannot understand why rank(x) behaves as outlined below. > Based on the results of first x vector values ranking, which is as expected in my opinion, > I cannot explain the following results. > >> x <- c(12,34,15,77,78) >> x[rank(x)] > [1] 12 15 34 77 78 (OK) > >> x <- c(12,34,15,77,78,22) >> x[rank(x)] > [1] 12 77 34 78 22 15 (?) > >> x <- c(12,34,77,15,78) >> x[rank(x)] > [1] 12 77 15 34 78 (?) > > Please any feedback ? Thanks. > > BR, > > Giorgio Garziano > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.