r - R - 根据另一个矩阵索引更改矩阵值
问题描述
我有两个矩阵:
m1 <- matrix(runif(750), nrow = 50, byrow=T)
m2 <- matrix(rep(TRUE,750), nrow = 50, byrow=T)
对于每一m1
行,我需要找到两个最低值的索引。然后,我需要使用剩余的索引(即不是两个最低值)来分配FALSE
in 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
方法来实现相同的结果而不使用循环?
解决方案
你可以试试下面的代码
m2 <- t(apply(m1,1,function(x) x %in% head(sort(x),2)))
推荐阅读
- c# - 将数字字符串转换为四舍五入的小数 (C#)
- r - 从R中的数据创建表
- spring-cloud-dataflow - 组合任务不显示实际图形
- amazon-web-services - 在哪里可以找到我的 AWS Application Load Balancer IP?
- spring - SpringBoot RabbitMQ - 如何减少许多主题(事件)的样板?
- scala - Spark Scala 数据集类型层次结构
- firebird - 已解决:gbak 恢复 DB 引发违反 PRIMARY 或 UNIQUE KEY 约束
- jquery - SyntaxError: missing ) after argument list rails 5.2.2
- sed - 使用 sed 有效地提取多个日志值
- typescript - 将 2D FFT 应用于图像