# [R] R function for percentrank

John Kane jrkrideau at yahoo.ca
Sat Dec 1 20:58:34 CET 2007

```--- David Winsemius <dwinsemius at comcast.net> wrote:

> "tom soyer" <tom.soyer at gmail.com> wrote in
>
news:65cc7bdf0712010951p451a993i70da89f285d801de at mail.gmail.com:
>
>
> > John,
> >
> > The Excel's percentrank function works like this:
> if one has a number,
> > x for example, and one wants to know the
> percentile of this number in
> > a given data set, dataset, one would type
> =percentrank(dataset,x) in
> > Excel to calculate the percentile. So for example,
> if the data set is
> > c(1:10), and one wants to know the percentile of
> 2.5 in the data set,
> > then using the percentrank function one would get
> 0.166, i.e., 2.5 is
> > in the 16.6th percentile.
> >
> > I am not sure how to program this function in R. I
> couldn't find it as
> > a built-in function in R either. It seems to be an
> obvious choice for
> > a built-in function. I am very surprised, but
> maybe we both missed it.
>
> My nomination for a function with a similar result
> would be ecdf(), the
> empirical cumulative distribution function. It is of
> class "function" so
> efforts to index ecdf(.)[.] failed for me.
>
> > df4\$V2
> [1] 1 1 1 1 1 5 6 7 9
> > ecdf.V2<-ecdf(df4\$V2)
> > ecdf.V2(df4\$V2)
>  [1] 0.2 0.2 0.4 0.4 0.5 0.6 0.7 0.8 1.0 0.9
>
> Don't have Excel, but the OpenOffice.org Calc
> program has the same
> function. It produces:
> x    percentrank(x)
> 1	0.0000000
> 1	0.0000000
> 3	0.2222222
> 3	0.2222222
> 4	0.4444444
> 5	0.5555556
> 6	0.6666667
> 7	0.7777778
> 10	1.0000000
> 9	0.8888889
>
> (Not that I am saying that the OO.o/Excel function
> is what one _should_
> want. Its behavior seems pathological to me.)
>
Excel
x  percentrank(x)
1	0
1	0
3	0.222
3	0.222
4	0.444
5	0.555
6	0.666
7	0.777
10	1
9	0.888

It seems that OOo is following Excel's distinguished
footsteps.

How can one have a 0 percentile ranking?

> --
> David Winsemius
>
> >
> > On 12/1/07, John Kane <jrkrideau at yahoo.ca> wrote:
> >>
> >> I don't see one but that means nothing.   I think
> you
> >> can write such a function in a few minutes
> >>
> >> Will something like this work or am I
> >> missunderstanding what Excel's percentrank does ?
> >>
> >> aa <- rnorm(25);  aa  # data vector
> >> percentrank <- function(x) {
> >> var  <- sort(x)
> >> p.rank <- 1:length(var)/length(var)*100
> >> dd  <- cbind(var,p.rank)
> >> }
> >> pr <- percentrank(aa); pr
> >>
> >>
> >> --- tom soyer <tom.soyer at gmail.com> wrote:
> >>
> >> > Hi,
> >> >
> >> > Does anyone know if R has a built-in function
> that
> >> > is equvalent to Excel's
> >> > percentrank, i.e., returns the rank of a value
> in a
> >> > data set as a percentage
> >> > of the data set?
> >> >
> >> > Thanks,
> >> >
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help