如何根据另一个矩阵的真/假索引替换矩阵中的值? [英] How to replace values in matrix based on true/false indices of another matrix?

查看:0
本文介绍了如何根据另一个矩阵的真/假索引替换矩阵中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试用此矩阵中的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

解决方案一定很简单,但我解不出来。如果有人能帮助我,我将不胜感激。谢谢!

推荐答案

我们可以使用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

这篇关于如何根据另一个矩阵的真/假索引替换矩阵中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆