从数据帧计算相应的第 n 个百分位数

  • 本文关键字:百分 计算 数据帧 r
  • 更新时间 :
  • 英文 :

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

任何建议将不胜感激。

一个选项是遍历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

另一种选择是从matrixStatsrowQuantiles

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

最新更新