【问题标题】:How can i create a matrix that has all the rows reordered such that one column is in decreasing order?如何创建一个矩阵,将所有行重新排序,使一列按降序排列?
【发布时间】:2020-09-21 19:54:09
【问题描述】:

我当前的矩阵有 3 列,第一列是字母,第二列是数字,第三列是第一列和第二列连接在一起。我正在尝试按降序对第二列进行排序,并让其他两列根据中间列进行更改。这是我的代码,但结果不是降序。

matrix1[order(matrix1[column2], decreasing = TRUE),]

enter image description here

【问题讨论】:

  • 要对矩阵进行子集化,请使用matrix[rows, columns]。所以matrix1[column2]column2 放在“行”位置。试试matrix1[order(matrix1[, column2], decreasing = TRUE),]... 我假设column2 是一个变量,其中包含一个字符串,这里的第二列的名称。如果您想按数字引用第二列,请尝试matrix1[order(matrix1[, 2], decreasing = TRUE),]。如果这些都不起作用,请分享可复制的数据,例如 dput(head(matrix1)) ,它将通过复制/粘贴的方式包含您数据的所有相关结构。

标签: r


【解决方案1】:

问题在于matrix1[column2]。您缺少逗号,因此您将 2D 矩阵展平为 1D 矩阵,并且索引变得混乱。试试matrix1[,"column2"]matrix1$column2

【讨论】:

  • 如果它实际上是一个矩阵 $ 将不起作用......(尽管我承认此时这是一个相当大的“如果”)
  • 我尝试了“column2”部分,但值没有按降序排列(我附上了问题的图片)
  • 啊,这是因为第二列中的值没有存储为数字。请注意它们是如何引用引号的,并且它们是按第一个数字降序排列的?您可以使用蛮力选项并使用order(as.numeric(paste(matrix[,"column2"])), decreasing = TRUE)。不过,如果您打算稍后将它们实际用作数字,我现在将其转换为 data.frame 并为自己省点麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
相关资源
最近更新 更多