按向量搜索矩阵行

Searching rows of matrix by vector

我想调查矩阵中的每一行,看看它的值是否大于给定向量中的值。然后,我想根据是否成功将值转换为 1 或 0。我对编程还很陌生,尽管我在寻找答案,但我并没有自己弄明白。谢谢

v <- c(0.2,0.6,0.1,0.6,0.9)
m <- matrix(c(runif(15,min=0,max=1)),ncol=5,nrow=3)

largerthan <- m>v

你可以试试

 (m >v[col(m)])+0
 #      [,1] [,2] [,3] [,4] [,5]
 #[1,]    1    0    1    0    0
 #[2,]    1    1    1    1    0
 #[3,]    1    1    1    0    0

或者稍微快一点的方法是

 (m > rep(v, each=nrow(m)))+0L

原始数据集"m"是

 m
 #        [,1]      [,2]      [,3]      [,4]      [,5]
 #[1,] 0.2925740 0.5188971 0.2797356 0.2547251 0.6716903
 #[2,] 0.2248911 0.6626196 0.7638205 0.6048889 0.6729823
 #[3,] 0.7042230 0.9204438 0.8016306 0.3707349 0.3204306

如果您需要知道是否有任何行值大于任何向量元素

 apply((m >v[col(m)]), 1, any)
 #[1] TRUE TRUE TRUE

数据

set.seed(24)
m <- matrix(runif(15,min=0,max=1),ncol=5,nrow=3)
v <- c(0.2,0.6,0.1,0.6,0.9)

你可以试试这个代码:

ifelse(m > matrix(v, ncol = 5, nrow = 3, byrow = TRUE), 1, 0)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    1    0    0    1
## [2,]    1    0    1    0    0
## [3,]    1    1    1    0    0