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,A Col2:C,B,D,A,ER——使用单独矩阵中的排序数据对矩阵中的数据进行排序,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 <- 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个起始材料的示例和最终输出的示例。不一定要很大。可能类似于这样:我最终以一种迂回的方式完成了这项工作。谢谢大家的帮助。