【问题标题】:Sorting a large matrix in R在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:天哪,是的,很简单。

标签: r sorting matrix


【解决方案1】:

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

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

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

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

然后你订购你的数据

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多