【发布时间】:2018-03-28 21:41:08
【问题描述】:
我有一个非常大的方阵。我想找到一种有效的方法来从矩阵中获取一些“顶部”(最小或最大)值,但保留行/列。使用较小的矩阵,我可以执行以下操作:
m <- matrix(rnorm(100), ncol=10, nrow=10)
m <- cbind(as.vector(m), as.vector(col(m)), as.vector(row(m)))
head(m[ order(m[,1]), ])
但是,如果矩阵非常大,这是不切实际的。有没有更好、更有效的方法?
【问题讨论】:
-
您可以考虑使用
data.table和setkey可能是一个可以考虑的选项。否则,您可以考虑使用自定义函数从m[,1]获取最大n元素的行号 -
为什么不将索引存储到原始
m,然后使用它来查找列和行?这样您就不必覆盖原始矩阵。sel <- order(m)[1:3]并将其用于子集row(m)[sel]和类似的col函数。 -
@thelatemail:天哪,是的,很简单。