R 如何重新排列矩阵?
我需要创建一个函数,它将根据矩阵中的值重新排列任何平方矩阵 如果我有这样的矩阵:R 如何重新排列矩阵?,r,sorting,matrix,R,Sorting,Matrix,我需要创建一个函数,它将根据矩阵中的值重新排列任何平方矩阵 如果我有这样的矩阵: [,1] [,2] [,3] [,4] [1,] 1 3 6 10 [2,] 2 5 9 13 [3,] 4 8 12 15 [4,] 7 11 14 16 M[,1][,2][,3][,4] #> [1,] 1 5 9 13 #> [2,] 2 6 10 14 #> [3,]
[,1] [,2] [,3] [,4]
[1,] 1 3 6 10
[2,] 2 5 9 13
[3,] 4 8 12 15
[4,] 7 11 14 16
M[,1][,2][,3][,4]
#> [1,] 1 5 9 13
#> [2,] 2 6 10 14
#> [3,] 3 7 11 15
#> [4,] 4 8 12 16
重新排列后,需要如下所示:
[,1] [,2] [,3] [,4]
[1,] 1 3 6 10
[2,] 2 5 9 13
[3,] 4 8 12 15
[4,] 7 11 14 16
所以它是从最低的(左上角)到最高的(右下角)排序的,但是数字是按对角线排序的(是右边的单词吗?),而不是按行或列排序的
我知道如何“手动”完成此操作,但我无法理解此重新排列操作所依据的任何规则。这里有一个函数
以R为底的列到对角线。它使用带有适当因子的拆分
和未拆分
列到对角线[1,]4 15 12 10 21
#> [2,] 19 7 5 23 6
#> [3,] 9 17 2 8 1
#> [4,] 3 11 16 25 14
#> [5,] 22 18 20 13 24
柱到对角线(M)
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] 4 9 15 18 20
#> [2,] 19 22 11 16 25
#> [3,] 3 17 2 8 6
#> [4,] 7 5 23 21 14
#> [5,] 12 10 13 1 24
由(v0.2.1)1)行(m)+列(m)
在2019-12-15创建,沿反向对角线为常数,因此:
M <- replace(m, order(row(m) + col(m)), m)
不清楚对角线上的排序是否仅意味着它们从存储顺序中被分解到反向对角线上,或者它们实际上是在每个反向对角线中之后进行排序。在问题的例子中,两种解释给出了相同的答案;但是,如果您确实希望使用不同的数据对结果进行反向对角线排序,则应用以下方法:
ave(M, row(M) + col(M), FUN = sort)
2)更长的版本:
M2 <- matrix(m[order(unlist(tapply(seq_along(m), row(m) + col(m), c)))], nrow(m))
M2您好,非常感谢您的及时回复!我想我能够理解你的方法:D。我坐在这里,思考如何更改每个数字:D。我对代码做了细微的更改,使其从最低到最高排序:`谢谢你的回答,但我无法理解你代码的内部工作原理。例如,如何添加排序元素,以便数字始终按照对角线的升序从最低到最高排序。谢谢你简化了它。关于排序,我扩展了答案。非常感谢,你非常有帮助!!