【问题标题】:R -- Sorting data in a matrix using ranked data in a separate matrixR - 使用单独矩阵中的排名数据对矩阵中的数据进行排序
【发布时间】:2011-10-31 01:56:12
【问题描述】:

我正在尝试使用来自不同矩阵的排名数据使用 R 对矩阵中的数据进行排序。

我有两个矩阵 (X) 和 (rank)。每个矩阵具有相同的列数和行数。我想使用矩阵(秩)中列的排名数据对矩阵(X)中的列中的数据进行重新排序。 (X) 中的第 1 列应使用 (rank) 中第 1 列的排名数据进行排序。

我已经在互联网上搜索了几天,但没有提出任何建议。我将不胜感激。

例子:

矩阵(X)

Col1:A、B、C、D、E

Col2:A、B、C、D、E

矩阵(等级)

Col1:2,4,5,3,1

Col2:3,2,4,1,5

目标矩阵(X.rank)

Col1:B、D、E、C、A

Col2:C、B、D、A、E

再次感谢。

【问题讨论】:

  • 我想我明白了,但请为我们提供 2 个起始 matices 的可重现示例和最终输出示例。不必很大。
  • 会是这样的:

标签: r


【解决方案1】:

如果我对你的问题理解正确,你可能想要这样的东西:

R> X <- matrix(c(1:10, (1:10)^2), 10, 2, byrow=FALSE)
R> rank <- seq(10,1,by=-1)    # simple decreasing rank
R> X
      [,1] [,2]
 [1,]    1    1
 [2,]    2    4
 [3,]    3    9
 [4,]    4   16
 [5,]    5   25
 [6,]    6   36
 [7,]    7   49
 [8,]    8   64
 [9,]    9   81
[10,]   10  100
R> X[rank,]
      [,1] [,2]
 [1,]   10  100
 [2,]    9   81
 [3,]    8   64
 [4,]    7   49
 [5,]    6   36
 [6,]    5   25
 [7,]    4   16
 [8,]    3    9
 [9,]    2    4
[10,]    1    1
R> 

我不确定您是否要独立地重新排序矩阵的每一列。对我来说,这并没有太大意义,因为我们通常使用 每个观察的行 和变量列来保存矩阵——所以你希望将行保持在一起。

但是您可能有不同的需求,我在这里为整个矩阵所做的工作可以通过单独的分配逐列以相同的方式完成。

【讨论】:

  • 我最终完成了这项工作。谢谢大家的帮助。
【解决方案2】:

这里有一个例子可以帮助你解决这个问题

# vector
x = rnorm(5)

# ranks
y = sample(5)

# sort vector based on ranks
x[match(sort(y), y)]

您可以将其包裹在 apply 调用中以处理整个矩阵。请注意,这可能不是最有效的解决方案。因此,如果您的矩阵很大,请让人们知道,这样解决方案可能会更加集中。

编辑。这是一个扩展示例,它将调用包装在 sapply 中,以对矩阵实现相同的效果。

x = matrix(rnorm(10), ncol = 2)  # original matrix to sort
y = cbind(sample(5), sample(5))  # rank matrix for sort order
sapply(1:NCOL(x), function(i) {
  .x = x[,i]; .y = y[,i]
  .x[match(sort(.y), .y)]
})

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 2020-11-04
    • 2014-01-22
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多