如何一次按多列排序table?

How to sort table according to multiple columns at a time?

我有 table 16 列,前三列是输入列。我想一次根据前三列对整个 table 进行排序。

T = table(a1, a2, a3, ..., a16)

所有 a1a2a3 将按升序排列。
例如:

a1 = [6 3 9 6 3 9 6 5]' 
a2 = [7 8 2 3 7 7 6 7]' 
a3 = [9 2 3 3 4 3 7 4]'

输出应为:

a1 = [3 3 5 6 6 6 9 9]'
a2 = [7 8 7 3 6 7 2 7]'
a3 = [4 2 4 3 7 9 3 3]'

我也不确定,如果我完全理解这个问题。如果我理解正确,你想按第一列排序,如果第一列中的值相等,请考虑第二列...

解决此问题的一种方法(仅假设为正值)是利用 int/float/double 的范围,如下所示:

a1 = [6 3 9 6 3 9 6 5]';
a2 = [7 8 2 3 7 7 6 7]';
a3 = [9 2 3 3 4 3 7 4]';
[~,order] = sort((a1 * max(a2+1) + a2 ) * max(a3+1) + a3);

这会给你想要的结果:

[a1(order)'; a2(order)'; a3(order)']
 3     3     5     6     6     6     9     9
 7     8     7     3     6     7     2     7
 4     2     4     3     7     9     3     3

使用 max(abs(...)) 可能还允许您使用负值。这种方法虽然实用但不太好,我认为...

我认为您要查找的函数是 sortrows。例如

a1 = [6 3 9 6 3 9 6 5]';
a2 = [7 8 2 3 7 7 6 7]';
a3 = [9 2 3 3 4 3 7 4]';
temp = table(a1,a2,a3);
sortrows(temp,[1,2,3])

在其中提供要作为排序依据的列的向量。

这给你

ans =
  8×3 table
    a1    a2    a3
    __    __    __
    3     7     4 
    3     8     2 
    5     7     4 
    6     3     3 
    6     6     7 
    6     7     9 
    9     2     3 
    9     7     3 

,先按第 1 列排序,然后按第 2 列排序,最后按第 3 列排序。