我有2个矩阵
我知道如何通过另一个矩阵的元素比较和替换conditionnaly矩阵的元素,但只有这两个元素共享相同的[i,j]:
ifelse(matrix1<0.5, matrix2[,], matrix1[,])
在这里,我想用另一列的matrix2元素替换matrix1的元素,如下所示:
如果 matrix1 [i,j]&lt; 0.5 那么我想替换它是matrix2 [i,j + 2] Else 我想将其替换为matrix2 [i,j + 1]
问题是:
如何在大矩阵上有效地进行这种比较?
以下是数据:
> dput(matrix1)
structure(c(0.782534098718315, 0.279918688116595, 0.139927505282685,
0.485497816000134, 0.150636059232056, 0.976677459431812, 0.101831247797236,
0.491994257550687, 0.492571017006412), .Dim = c(3L, 3L))
> dput(matrix2)
structure(1:25, .Dim = c(5L, 5L))
答案 0 :(得分:3)
此处m1
和m2
是两个矩阵。基于@alexis_laz评论,您可以尝试
indx1 <- tail(seq(ncol(m1)+1),ncol(m1))
indx2 <- tail(seq(ncol(m1)+2),ncol(m1))
rowInd <- 1:nrow(m1)
ifelse(m1 < 0.5, m2[rowInd,indx2], m2[rowInd, indx1])
# [,1] [,2] [,3]
#[1,] 6 16 21
#[2,] 12 17 22
#[3,] 13 13 23
或者您可以通过
创建index
indx <- cbind(c(row(m1)), c(col(m1)))
indx1 <- cbind(indx[,1], indx[,2]+1)
indx2 <- cbind(indx[,1], indx[,2]+2)
ifelse(m1 < 0.5, m2[indx2], m2[indx1])
# [,1] [,2] [,3]
#[1,] 6 16 21
#[2,] 12 17 22
#[3,] 13 13 23