我有两个矩阵:
A = matrix(c(2,1,3,6,4,3,8,1,6,2,9,5), ncol=4)
B = matrix(c(20,10,30,60,40,30,80,10,60,20,90,50), ncol=4)
现在,我已经按行对矩阵A进行了排序:
A_sorted=t(apply(A,1,sort))
2 2 6 8
1 1 4 9
3 3 5 6
现在,我想按照与A相同的顺序对B矩阵进行排序,这样新的矩阵'B_sorted'将是:
20 20 60 80
10 10 40 90
30 30 50 60
我在过去Sort one matrix based on another matrix找到了类似的答案,但答案中的代码不适用于不同维度的矩阵。
答案 0 :(得分:2)
我们可以使用for
循环遍历行序列,并根据'A'行的order
分配'B'行
for(i in seq_len(nrow(A))) B[i,] <- B[i,][order(A[i,])]
B
# [,1] [,2] [,3] [,4]
#[1,] 20 20 60 80
#[2,] 10 10 40 90
#[3,] 30 30 50 60
答案 1 :(得分:2)
您可以创建使用order(row(A), A)
按行对矩阵进行排序的索引,然后使用它重新排序原始矩阵;稍后使用matrix
为已排序数据添加维度:
matrix(B[order(row(A), A)], byrow = TRUE, ncol = ncol(B))
# [,1] [,2] [,3] [,4]
#[1,] 20 20 60 80
#[2,] 10 10 40 90
#[3,] 30 30 50 60
答案 2 :(得分:1)
t(sapply(1:NROW(A), function(i) B[i,][order(A[i,])]))
# [,1] [,2] [,3] [,4]
#[1,] 20 20 60 80
#[2,] 10 10 40 90
#[3,] 30 30 50 60