我一直试图在此矩阵中用0替换0以下的所有值:
vec.1 <- c(0, -1, -2, -1, 1, 0)
vec.2 <- c(-1, 0, -1.5, -2, 2, 1)
vec.3 <- c(-2, -1.5, 0, -1, 1, 2)
vec.4 <- c(-1, 0, -1, 0, 0, 1)
vec.5 <- c(1, 2, 1, 0, 0, -1)
vec.6 <- c(0, 1, 2, 1, -1, 0)
mat <- rbind(vec.1, vec.2, vec.3, vec.4, vec.5, vec.6, deparse.level = 0)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 -1.0 -2.0 -1 1 0
[2,] -1 0.0 -1.5 -2 2 1
[3,] -2 -1.5 0.0 -1 1 2
[4,] -1 0.0 -1.0 0 0 1
[5,] 1 2.0 1.0 0 0 -1
[6,] 0 1.0 2.0 1 -1 0
我试过这段代码:
for((i in mat[]) < 0) {i = 0}
但它不起作用。我也尝试过:
matrix.positive <- mat < 0
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] FALSE TRUE TRUE TRUE FALSE FALSE
[2,] TRUE FALSE TRUE TRUE FALSE FALSE
[3,] TRUE TRUE FALSE TRUE FALSE FALSE
[4,] TRUE FALSE TRUE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE FALSE TRUE
[6,] FALSE FALSE FALSE FALSE TRUE FALSE
mat[which(matrix.positive) = 0]
但它也不起作用(我确实意识到这没有多大意义,但我是R(和编码)的新手,所以我尝试了不同的方法)。如果没有等号和零,我得到这个向量:
[1] -1.0 -2.0 -1.0 -1.0 -1.5 -2.0 -1.5 -1.0 -1.0 -2.0 -1.0 -1.0 -1.0
解决方案必须非常简单,但我无法解决。如果有人能帮助我,我将不胜感激。谢谢!
答案 0 :(得分:3)
尝试pmax
:
pmax(mat, 0)
,并提供:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 0 0 0 1 0
[2,] 0 0 0 0 2 1
[3,] 0 0 0 0 1 2
[4,] 0 0 0 0 0 1
[5,] 1 2 1 0 0 0
[6,] 0 1 2 1 0 0
答案 1 :(得分:2)
我们可以使用replace
将逻辑矩阵作为第二个参数,将替换值作为第三个参数
replace(mat, mat < 0, 0)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 0 0 0 0 1 0
#[2,] 0 0 0 0 2 1
#[3,] 0 0 0 0 1 2
#[4,] 0 0 0 0 0 1
#[5,] 1 2 1 0 0 0
#[6,] 0 1 2 1 0 0
或通过基于逻辑矩阵提取'mat'的值并将其赋值为0来使用赋值
mat[mat < 0] <- 0
因为它是一个数字matrix
,算术也应该起作用
(mat >= 0) * mat