首页 > 解决方案 > R - 根据另一个矩阵索引更改矩阵值

问题描述

我有两个矩阵:

m1 <- matrix(runif(750), nrow = 50, byrow=T)
m2 <- matrix(rep(TRUE,750), nrow = 50, byrow=T)

对于每一m1行,我需要找到两个最低值的索引。然后,我需要使用剩余的索引(即不是两个最低值)来分配FALSEin m2

一行很容易做到:

ind <- order(m1[1,], decreasing=FALSE)[1:2]
m2[1,][-ind] <- FALSE

因此,我可以使用循环对所有行执行相同的操作:

for (i in 1:dim(m1)[1]){
  
  ind <- order(m1[i,], decreasing=FALSE)[1:2]
  m2[i,][-ind] <- FALSE
  
}

但是,在我的数据集中,这个循环的运行速度比我想要的慢(因为我的矩阵非常大 - 500000x150000)。

有没有更快的R方法来实现相同的结果而不使用循环?

标签: rmatrix

解决方案


你可以试试下面的代码

m2 <- t(apply(m1,1,function(x) x %in% head(sort(x),2)))

推荐阅读