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