首页 > 解决方案 > 从数据框中计算相应的第 n 个百分位数

问题描述

OBS = data.frame(c(0.92, 1.00, 0.96, 0.87, 0.95))

OBS
0.92
1.00
0.96
0.87
0.95

REF = matrix(1:50, nrow=5, ncol=10)

REF
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  6  11 16 21 26 31 36 41 46
2  7  12 17 22 27 32 37 42 47
3  8  13 18 23 28 33 38 43 48
4  9  14 19 24 29 34 39 44 49
5  10 15 20 25 30 35 40 45 50

OBS 代表百分位数。我想搜索 REF 中的每一行并从 OBS 计算每一行的相应百分位数。例如,这意味着计算 REF 第一行的第 92 个百分位、REF 第二行的第 100 个百分位、REF 第三行的第 96 个百分位等。在这个简化的示例中,结果将是:

OUT
42.40
47.00
46.20
43.15
47.75

非常感谢任何建议。

标签: r

解决方案


一个选项是遍历 的行序列matrix,获取相应的“OBS”并使用quantile

unname(sapply(seq_len(nrow(REF)), function(i) quantile(REF[i, ], OBS[[1]][i])))
#[1] 42.40 47.00 46.20 43.15 47.75

另一种选择是rowQuantilesmatrixStats

library(matrixStats)
diag(rowQuantiles(REF, probs = OBS[[1]]))
#[1] 42.40 47.00 46.20 43.15 47.75

推荐阅读