簡體   English   中英

使用向量化對 R 中的矩陣與向量進行逐行比較

[英]Row wise comparison of a matrix with a vector in R using vectorization

我想將矩陣的每一行與向量進行比較,並從第i行生成第一個值的索引,該索引小於向量中的第i個值。 矩陣的每一行中的值按降序排序。 由於行數非常大,我正在尋找一個矢量化解決方案,並希望避免循環並應用 function。

比如我想比較下面的矩陣M和向量v,那么output應該是(3,2,3,NA)。

M = matrix(c(10.2,11.0,10,9.5,9.2,8.9,7.6,8.4,5.4,5.6,6.5,7.2),4,3)
M
     [,1] [,2] [,3]
[1,] 10.2  9.2  5.4
[2,] 11.0  8.9  5.6
[3,] 10.0  7.6  6.5
[4,]  9.5  8.4  7.2

v <- c(8.4,9.5,7.0,6.0)

The output should be (3,2,3,NA).

當我在 R 中使用“哪個”function 時,它適用於每一行,但不是矢量化的。

which(M[2,]<v[2])[1]
2

which(M[3,]<v[3])[1]
3

謝謝!

apply(M < v, 1, function(x) which(x)[1])
# [1]  3  2  3 NA

矢量化選項將是max.col

max.col(M < v, 'first') *NA^!rowSums(M < v)
#[1]  3  2  3 NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM