FAQ
Hi,

I have a vector with values:

x <- rnorm(1000, 5, 2)

and one single value:
y <- 6.2

now I would like to know the percent rank of y based on the 'population'-vector x.
Is there a convenient function that calculates the percent rank of a y for the given vector x?

thanks!

## Search Discussions

•  at Jan 11, 2012 at 1:58 pm ⇧

On Jan 11, 2012, at 8:12 AM, Martin Batholdy wrote:

Hi,

I have a vector with values:

x <- rnorm(1000, 5, 2)

and one single value:
y <- 6.2

now I would like to know the percent rank of y based on the
'population'-vector x.
Is there a convenient function that calculates the percent rank of a
y for the given vector x?
Two options :
1) sort x and use findInterval, divide the index by length(x) and
multiply by 100
(It can all be done as a one-liner.)

2) I generally "reach for" the `ecdf` "function making machine" when I
see sample quantile problems and see if I can cast the problem in
terms for which it applies.

For my random draw I get:
findInterval(6.2, sort(x)) [1] 704
xecdf <- ecdf(x)
xecdf(6.2)
[1] 0.704

--
David Winsemius, MD
West Hartford, CT
•  at Jan 11, 2012 at 3:07 pm ⇧
If performance is an issue, I think mean(x < y) will be as quick as it can be done in R alone (you could do it in C in a single pass if needed which might be a good first exercise in using compiled code)

Michael
On Jan 11, 2012, at 8:58 AM, David Winsemius wrote:

On Jan 11, 2012, at 8:12 AM, Martin Batholdy wrote:

Hi,

I have a vector with values:

x <- rnorm(1000, 5, 2)

and one single value:
y <- 6.2

now I would like to know the percent rank of y based on the 'population'-vector x.
Is there a convenient function that calculates the percent rank of a y for the given vector x?
Two options :
1) sort x and use findInterval, divide the index by length(x) and multiply by 100
(It can all be done as a one-liner.)

2) I generally "reach for" the `ecdf` "function making machine" when I see sample quantile problems and see if I can cast the problem in terms for which it applies.

For my random draw I get:
findInterval(6.2, sort(x)) [1] 704
xecdf <- ecdf(x)
xecdf(6.2)
[1] 0.704

--
David Winsemius, MD
West Hartford, CT

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
and provide commented, minimal, self-contained, reproducible code.
•  at Jan 11, 2012 at 3:57 pm ⇧

findInterval(6.2, sort(x)) [1] 704
xecdf <- ecdf(x)
xecdf(6.2)
[1] 0.704

thanks, that helped a lot!

On 11.01.2012, at 14:58, David Winsemius wrote:

On Jan 11, 2012, at 8:12 AM, Martin Batholdy wrote:

Hi,

I have a vector with values:

x <- rnorm(1000, 5, 2)

and one single value:
y <- 6.2

now I would like to know the percent rank of y based on the 'population'-vector x.
Is there a convenient function that calculates the percent rank of a y for the given vector x?
Two options :
1) sort x and use findInterval, divide the index by length(x) and multiply by 100
(It can all be done as a one-liner.)

2) I generally "reach for" the `ecdf` "function making machine" when I see sample quantile problems and see if I can cast the problem in terms for which it applies.

For my random draw I get:
findInterval(6.2, sort(x)) [1] 704
xecdf <- ecdf(x)
xecdf(6.2)
[1] 0.704

--
David Winsemius, MD
West Hartford, CT

## Related Discussions

Discussion Overview
 group r-help categories r posted Jan 11, '12 at 1:12p active Jan 11, '12 at 3:57p posts 4 users 3 website r-project.org irc #r

### 3 users in discussion

Content

People

Support

Translate

site design / logo © 2017 Grokbase