我有两个矩阵
A
2 1 0
0 1 6
1 0 0
B
1 1 3
4 2 8
2 0 1
Run Code Online (Sandbox Code Playgroud)
我想找出满足以下标准的比较A和B的元素:
if A[i,j] =0 and B[i,j]>0
Run Code Online (Sandbox Code Playgroud)
所以我的结果矩阵应该是
C
0 0 3
4 0 0
0 0 1
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法,除了一个for loop?
如果这是真的,我不确定你想要哪个元素,所以我假设总和:
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
Run Code Online (Sandbox Code Playgroud)
但更清楚的可能是使用which:
which(A==0 & B>0, arr.ind=TRUE)
row col
[1,] 2 1
[2,] 1 3
[3,] 3 3
Run Code Online (Sandbox Code Playgroud)
请注意,索引矩阵的正确方法是A[i,j]代替A[i][j]。
常规逻辑和算术运算符在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
Run Code Online (Sandbox Code Playgroud)