在R中对大矩阵进行排序

Posted

技术标签:

【中文标题】在R中对大矩阵进行排序【英文标题】:Sorting a large matrix in R 【发布时间】: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.tablesetkey 可能是一个可以考虑的选项。否则,您可以考虑使用自定义函数从 m[,1] 获取最大 n 元素的行号 为什么不将索引存储到原始m,然后使用它来查找列和行?这样您就不必覆盖原始矩阵。 sel &lt;- order(m)[1:3] 并将其用于子集 row(m)[sel] 和类似的 col 函数。 @thelatemail:天哪,是的,很简单。 【参考方案1】:

您必须使用您的矩阵创建一个数据框,然后根据您的喜好进行排序。

那么,最好的方法不是查看矩阵的顺序,而是创建数据框并对其进行排序的最佳方法。

使用包data.table,您可以以快速且节省内存的方式创建数据帧:

m <- data.table(as.vector(m), as.vector(col(m)), as.vector(row(m)))

然后你订购你的数据

m <- m[ order(m[,1]), ]

【讨论】:

以上是关于在R中对大矩阵进行排序的主要内容,如果未能解决你的问题,请参考以下文章

R:循环矩阵对特定行单独排序列

如何在 BigQuery 中对大表进行排序?

C:对大数据进行排序;不在记忆中

对大文件排序

如何在 Python 中对大文本文件流进行过滤和排序

核心数据。对大尺寸 NSManagedObject 的 NSMutableSet 进行排序