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

Proportion of Data Less Than Given Value in R

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

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

谢谢,

杰克

如果您不想使用 quantile

假设您有一个向量 v,其值为 1 到 100:

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

然后您可以根据您想要的阈值(在本例中为 0.4 - 40%)选择 v 的最小值:

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

然而,quantile 给你相同的数字:

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