如何一次按多列排序table?
How to sort table according to multiple columns at a time?
我有 table 16 列,前三列是输入列。我想一次根据前三列对整个 table 进行排序。
T = table(a1, a2, a3, ..., a16)
所有 a1
、a2
和 a3
将按升序排列。
例如:
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 列排序。
我有 table 16 列,前三列是输入列。我想一次根据前三列对整个 table 进行排序。
T = table(a1, a2, a3, ..., a16)
所有 a1
、a2
和 a3
将按升序排列。
例如:
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 列排序。