首页 > 解决方案 > 如何根据数组中的不同列值对行进行排序,但在 R 中的矩阵中单独工作

问题描述

我有一个这样的数组:

> a
, , 1

     [,1] [,2] [,3] [,4]
[1,]    3    5    7    5
[2,]    5    3    6    7
[3,]    6    9    8    4

, , 2

     [,1] [,2] [,3] [,4]
[1,]    4    9    3    3
[2,]    6    4    6    5
[3,]    8    3    2    6

我想根据 [,3] 列中的递减值对行进行排序。输出应该是这样的:

> Output
, , 1

     [,1] [,2] [,3] [,4]
[1,]    6    9    8    4
[2,]    3    5    7    5
[3,]    5    3    6    7

, , 2

     [,1] [,2] [,3] [,4]
[1,]    6    4    6    5
[2,]    4    9    3    3
[3,]    8    3    2    6

我可以将order()函数与矩阵一起使用,编写如下内容:m[order(m[,3],decreasing=T),]而且我知道我应该使用apply()函数,但我试图将两者结合起来,但它在我手中不起作用。我曾经在使用数组时遇到过这类问题,因此欢迎任何关于在哪里可以找到管理数组的好信息的提示。如果有任何帮助,我将不胜感激。

标签: rarrays

解决方案


我会使用一个好的旧for循环来做到这一点。

xy <- array(c(3,5,6,5,3,9,7,6,8,5,7,4,4,6,8,9,4,3,3,6,2),c(3,4,2))

for (i in seq_len(dim(xy)[3])) {
  myorder <- order(xy[,, i][, 3], decreasing = TRUE)
  xy[,, i] <- xy[myorder, , i]
}

> xy
, , 1

     [,1] [,2] [,3] [,4]
[1,]    6    9    8    4
[2,]    3    5    7    5
[3,]    5    3    6    7

, , 2

     [,1] [,2] [,3] [,4]
[1,]    6    4    6    5
[2,]    4    9    3    3
[3,]    8    3    2    6

推荐阅读