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
另一种选择是从matrixStats
rowQuantiles
library(matrixStats)
diag(rowQuantiles(REF, probs = OBS[[1]]))
#[1] 42.40 47.00 46.20 43.15 47.75