在R中,我有一個M
形式的矩陣
lower upper value
0.1 0.2 1.2
0.2 0.3 2.4
0.3 0.4 -0.3
v
以及一個值在 (0,1) 中的向量。對于 中的每個值v
,我想找到相應的行,M
使得該值介于該行中的“下”和“上”值之間,并從value
列中獲取相應的數字。輸出應該是一個y
長度相同的向量,v
其中的每個元素y
都是如上所述的相關“值”。我該怎么做?我知道我需要使用該apply
功能,但想不出最有效的方法。
例如:對于M
上述情況,假設v = c(0.12, 0.34)
. 那么預期的輸出是y = c(1.2, -0.3)
uj5u.com熱心網友回復:
cut
與每個值一起使用v
以查找它屬于哪個范圍:
# example data for `v`:
set.seed(1)
v <- round(runif(5, min=0.1, max=0.4),2)
#[1] 0.18 0.21 0.27 0.37 0.16
M[, "value"][cut(v, c(M[1, "lower"], M[, "upper"]))]
#[1] 1.2 2.4 2.4 -0.3 1.2
在哪里M
:
M <- as.matrix(read.table(text="lower upper value
0.1 0.2 1.2
0.2 0.3 2.4
0.3 0.4 -0.3", header=TRUE))
uj5u.com熱心網友回復:
M[findInterval(v, c(M[1,'lower'], M[,'upper'])), 'value']
[1] 1.2 -0.3
uj5u.com熱心網友回復:
另一種選擇是使用sapply
從 中拉出value
符合條件的v
。
sapply(v, \(x) M[x > M[, "lower"] & x < M[, "upper"],][["value"]])
#[1] 1.2 -0.3
資料
M <- structure(c(0.1, 0.2, 0.3, 0.2, 0.3, 0.4, 1.2, 2.4, -0.3), .Dim = c(3L,
3L), .Dimnames = list(NULL, c("lower", "upper", "value")))
v = c(0.12, 0.34)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460007.html