Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R——使用单独矩阵中的排序数据对矩阵中的数据进行排序_R - Fatal编程技术网

R——使用单独矩阵中的排序数据对矩阵中的数据进行排序

R——使用单独矩阵中的排序数据对矩阵中的数据进行排序,r,R,我正在尝试使用R从不同的矩阵中排序数据来排序矩阵中的数据 我有两个矩阵(X)和(秩)。每个矩阵的列数和行数相同。我想使用矩阵(rank)列中的排名数据对矩阵(X)列中的数据进行重新排序。(X)中的第1列应使用(秩)中第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

我正在尝试使用R从不同的矩阵中排序数据来排序矩阵中的数据

我有两个矩阵(X)和(秩)。每个矩阵的列数和行数相同。我想使用矩阵(rank)列中的排名数据对矩阵(X)列中的数据进行重新排序。(X)中的第1列应使用(秩)中第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


再次感谢。

如果我没弄错您的问题,您可能会想要这样的东西:

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> 
R>X秩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[等级,]
[,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>
我不确定您是否要独立地对矩阵的每一列重新排序。对我来说,这没有太大的意义,因为我们通常在矩阵中保留每个观察值的行和变量的列,所以您希望将这些行保持在一起


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

下面是一个可能帮助您解决此问题的示例

# 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)]
})

我想我能理解,但请给我们提供一个可复制的2个起始材料的示例和最终输出的示例。不一定要很大。可能类似于这样:我最终以一种迂回的方式完成了这项工作。谢谢大家的帮助。