R中数据的比例小于给定值

时间:2018-03-08 10:38:27

标签: r quantile

在R中,如何找到向量中的最小值,使得小于或等于它的数据比例大于某个数?

注意,我不打算使用quantile函数,因为(我相信)这不会给出最小的值。

谢谢,

杰克

1 个答案:

答案 0 :(得分:2)

如果您热衷于不使用quantile

假设您有一个值为{1}的向量v

v <- runif(100,1,100)

您可以获得小于或等于每个值的数据比例:

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

或者如果您想排除观察结果:

# 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

然后,您可以根据所需的阈值选择v的最小值(在这种情况下为0.4 - 40%):

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

但是,quantile会为您提供相同的号码:

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