比较 2 个矩阵并根据组条件用 1 或 0 填充矩阵
Compare 2 matrices and fill a matrix with 1 or 0 based on group condition
我想知道是否有办法避免在循环中使用嵌套 ifs 来解决这个问题:
- 我有一个包含值的 100 x 14 矩阵。第 1 列是每一行所属的组(共有 11 个组)。我们称它为 MatrixA。
- 矩阵 B,具有 11 个不同组(大小 11x14,其中第一列具有组编号)中每一组的每列的平均值。
- 两个矩阵的列顺序相同
如果单元格上的值大于矩阵B的平均值,我想将MatrixA的值更改为1,否则,将0。如果MatrixA中的单元格[1,2]属于第5组,然后检查MatrixB中第5组第2列的平均值并输入1或0,依此类推。
MatrixA = cbind(sample(1:11,100,replace = T),matrix(data = rnorm(100*13),nrow = 100,ncol = 13 ))
我们假设这些是 MatrixA 中每一列的平均值
MatrixB = cbind(1:11,matrix(data = rnorm(11*13),nrow = 11,ncol = 13 ))
我希望正确表述我的问题。谢谢。
尝试
(MatrixA>MatrixB[match(MatrixA[,1],MatrixB[,1]),])*1L
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 1 1 1
[2,] 0 1 1 0 1
[3,] 0 1 1 1 1
[4,] 0 1 1 0 1
[5,] 0 1 1 1 0
...
注意:第一列(groups)全为0,可以重新替换回来得到groups。
我想知道是否有办法避免在循环中使用嵌套 ifs 来解决这个问题:
- 我有一个包含值的 100 x 14 矩阵。第 1 列是每一行所属的组(共有 11 个组)。我们称它为 MatrixA。
- 矩阵 B,具有 11 个不同组(大小 11x14,其中第一列具有组编号)中每一组的每列的平均值。
- 两个矩阵的列顺序相同
如果单元格上的值大于矩阵B的平均值,我想将MatrixA的值更改为1,否则,将0。如果MatrixA中的单元格[1,2]属于第5组,然后检查MatrixB中第5组第2列的平均值并输入1或0,依此类推。
MatrixA = cbind(sample(1:11,100,replace = T),matrix(data = rnorm(100*13),nrow = 100,ncol = 13 ))
我们假设这些是 MatrixA 中每一列的平均值
MatrixB = cbind(1:11,matrix(data = rnorm(11*13),nrow = 11,ncol = 13 ))
我希望正确表述我的问题。谢谢。
尝试
(MatrixA>MatrixB[match(MatrixA[,1],MatrixB[,1]),])*1L
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 1 1 1
[2,] 0 1 1 0 1
[3,] 0 1 1 1 1
[4,] 0 1 1 0 1
[5,] 0 1 1 1 0
...
注意:第一列(groups)全为0,可以重新替换回来得到groups。