通过矢量搜索矩阵行

时间:2015-02-17 09:56:08

标签: r subset

我想研究矩阵中的每一行,看看它的值是否大于给定向量中的值。然后,我想将值转换为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

2 个答案:

答案 0 :(得分:2)

你可以尝试

 (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

和原始数据集&#34; m&#34;是

 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)

答案 1 :(得分:2)

你可以试试这段代码:

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