从分位数函数确定元素时如何找到元素索引?

How to find element index when element is determined from quantile function?

当使用 quantile() 确定元素时,如何找到元素的索引? 来自 similar questionmatch()which() 解决方案不起作用(它们 return NA),我认为它们不起作用是因为舍入问题。

如果两个索引的分位数结果是averaged/interpolated,我可以指定是否取lower/higher索引吗?我的数据 x 将始终排序。

示例数据集(显然这里的 0 和 1 分位数只是最小值和最大值,它们只是为了完整性检查而显示)

x <- c(0.000000e+00,9.771228e-09,5.864592e-06,3.474925e-04,9.083242e-04,2.458036e-02)
quantile(x, probs = c(0, 0.5, 1))
          0%          50%         100% 
0.0000000000 0.0001766785 0.0245803600 

如何找到这些分位数的索引?此处,索引为 1,??,6。 我想中位数是两个指数的平均值,所以我可以具体说明它 return 是第一个还是第二个指数?

使用findInterval ?

x <- c(0.000000e+00, 9.771228e-09, 5.864592e-06, 3.474925e-04,
       9.083242e-04,2.458036e-02)
findInterval(quantile(x, probs = c(0, 0.5, 1)), x)
#[1] 1 3 6

您可能想要 type=4,它使用经验 cdf 的线性插值(即考虑实际中位数)。

x <- c(0.000000e+00,9.771228e-09,5.864592e-06,3.474925e-04,9.083242e-04,2.458036e-02)
(q <- quantile(x, probs=c(0, 0.5, 1), type=4))
#           0%          50%         100% 
# 0.000000e+00 5.864592e-06 2.458036e-02 
match(q, x)
# [1] 1 3 6
x[match(q, x)]
# [1] 0.000000e+00 5.864592e-06 2.458036e-02

其他示例:

set.seed(42)
x <- runif(1e3)
(q <- quantile(x, probs=c(0, 0.5, 1), type=4))
#           0%          50%         100% 
# 0.0002388966 0.4803101290 0.9984908344 
match(q, x)
# [1]  92 174 917
x[match(q, x)]
# [1] 0.0002388966 0.4803101290 0.9984908344