在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.table
和setkey
可能是一个可以考虑的选项。否则,您可以考虑使用自定义函数从 m[,1]
获取最大 n
元素的行号
为什么不将索引存储到原始m
,然后使用它来查找列和行?这样您就不必覆盖原始矩阵。 sel <- 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中对大矩阵进行排序的主要内容,如果未能解决你的问题,请参考以下文章