user6429576
user6429576

Reputation:

Proportion of Data Less Than Given Value in R

In R, how can you find the smallest value in a vector such that the proportion of data less than or equal to it is greater than a certain number?

Note, I am not looking to use the quantile function, since (I believe) this doesn't give the smallest values.

Thanks,

Jack

Upvotes: 1

Views: 4085

Answers (1)

Val
Val

Reputation: 7023

If you're keen on not using quantile

Assuming you have a vector v with values 1 to 100:

v <- runif(100,1,100)

You can get the proportion of data that's less or equal to each value:

p <- sapply(v, function(x) sum(v <= x)/length(v))

or if you want to exclude the observation:

# p <- sapply(seq_along(v), function(x) sum(v[-x] <= v[x])/length(v))

>p
# [1] 0.88 0.92 0.28 0.80 0.59 0.50 0.71 0.13 0.61 0.67 0.42 0.68 0.91 0.25 0.43 0.93 0.98 0.12 0.44 0.51 0.85 0.14 1.00
# [24] 0.94 0.09 0.46 0.37 0.86 0.41 0.82 0.72 0.78 0.36 0.65 0.03 0.81 0.04 0.20 0.87 0.55 0.35 0.40 0.06 0.97 0.39 0.95
# [47] 0.84 0.58 0.96 0.56 0.31 0.32 0.38 0.77 0.07 0.74 0.64 0.17 0.26 0.48 0.63 0.99 0.75 0.53 0.83 0.18 0.27 0.79 0.66
# [70] 0.24 0.08 0.15 0.22 0.45 0.19 0.69 0.05 0.34 0.47 0.02 0.54 0.16 0.33 0.60 0.76 0.52 0.23 0.11 0.10 0.29 0.62 0.01
# [93] 0.21 0.90 0.89 0.70 0.30 0.49 0.73 0.57

Then you can choose the minimum value of v according to your desired threshold (0.4 - 40% in this case):

min(v[p > 0.4])
#[1] 45.24999

However, quantile gives you the same number:

min(v[v>quantile(v,0.4)])
#[1] 45.24999

Upvotes: 1

Related Questions