将两个矩阵与R中的标准进行比较

时间:2012-08-20 17:36:19

标签: r matrix

我有两个矩阵

A
2 1 0
0 1 6
1 0 0
B 
1 1 3
4 2 8
2 0 1

我想找出满足以下标准的比较A和B的元素:

if A[i,j] =0 and B[i,j]>0

所以我的结果矩阵应该是

C
0 0 3
4 0 0
0 0 1

除了for loop

之外,有什么方法可以做到这一点

3 个答案:

答案 0 :(得分:5)

常规逻辑和算术运算符在R中的矩阵上作用元素。只有%*%和kronecker运算符执行矩阵乘法。此外,您可以使用“[”和“[< - ”函数:

)索引矩阵
> C <- B
> C[!( A==0 & B >0) ] <- 0
> C
     [,1] [,2] [,3]
[1,]    0    0    3
[2,]    4    0    0
[3,]    0    0    1

答案 1 :(得分:4)

如果这是真的,我不确定你想要哪个元素,所以我假设总和:

A <- matrix(c(2, 1, 0, 0, 1, 6, 1, 0, 0),3,3,byrow=TRUE)
B  <- matrix(c(1, 1, 3, 4, 2, 8, 2, 0, 1),3,3,byrow=TRUE)

C <- ifelse(A==0 & B>0, A+B, 0)
     [,1] [,2] [,3]
[1,]    0    0    3
[2,]    4    0    0
[3,]    0    0    1

但更清楚的可能是使用which

which(A==0 & B>0, arr.ind=TRUE)
     row col
[1,]   2   1
[2,]   1   3
[3,]   3   3

编辑:

请注意,对矩阵编制索引的正确方法是A[i,j]而不是A[i][j]

答案 2 :(得分:1)

在矩阵上使用简单的比较运算符。

使用以下方式重新创建数据:

A <- as.matrix(read.table(text="
2 1 0
0 1 6
1 0 0"))

B <- as.matrix(read.table(text="
1 1 3
4 2 8
2 0 1"))

进行比较:

A==0 & B>0
        V1    V2    V3
[1,] FALSE FALSE  TRUE
[2,]  TRUE FALSE FALSE
[3,] FALSE FALSE  TRUE

然后使用ifelse

ifelse(A==0 & B>0, B, 0)
     V1 V2 V3
[1,]  0  0  3
[2,]  4  0  0
[3,]  0  0  1