Main Content

sortrows

行列または table の行の並べ替え

説明

B = sortrows(A) は、行列の行を、1 列目の要素の昇順で並べ替えます。1 列目に繰り返されている要素が存在する場合、sortrows は 2 列目の値を基準として並べ替え、その後の等しい値についても同じ動作を繰り返します。

B = sortrows(A,column) は、ベクトル column で指定された列に基づいて A を並べ替えます。たとえば、sortrows(A,4) は、A の行を 4 列目の要素に基づいて昇順に並べ替えます。sortrows(A,[4 6]) は、まず A の行を 4 列目の要素に基づいて並べ替え、次に 6 列目の要素に基づいて同順位のものを並べ替えます。

B = sortrows(___,direction) は、前述のどの構文についても A の行を direction で指定した順序で並べ替えます。direction は昇順の場合は 'ascend' (既定値)、降順の場合は 'descend' です。また、direction は要素が 'ascend''descend' である cell 配列にすることもでき、この場合、各要素は sortrows が操作する列に対応します。たとえば、sortrows(A,[4 6],{'ascend' 'descend'}) は 4 列目に基づいて A の行を昇順で並べ替え、次に 6 列目に基づいて同順位のものを降順で並べ替えます。

B = sortrows(___,Name,Value) は、行を並べ替えるための追加パラメーターを指定します。たとえば、sortrows(A,'ComparisonMethod','abs')A の要素を大きさの順に並べ替えます。

[B,index] = sortrows(___) は、B = A(index,:) となるような並べ替えを表すインデックス ベクトルも返します。

tblB = sortrows(tblA) は、table または timetable の行を並べ替えます。

  • tblA が table の場合、sortrows は最初の変数の値に基づいて tblA を昇順で並べ替えます。最初の変数の要素が繰り返し存在する場合、sortrows は 2 番目の変数を基準に並べ替え、以下同様に続きます。

  • tblA が timetable の場合、sortrowstblA の行をその行時間の昇順に並べ替えます。ただし、行は行時間のみを基準にして並べ替えられます。行時間が繰り返し存在する場合、sortrows は timetable 変数の要素を基準にした並べ替えを行いません。

    timetable の行時間は datetime 値または duration 値であり、それによって timetable の最初の次元に沿って行にラベルが設定されます。

tblB = sortrows(tblA,'RowNames') は、table を行名に基づいて並べ替えます。table の行名により、table の最初の次元に沿って行にラベルが設定されます。tblA に行名がない場合、つまり tblA.Properties.RowNames が空の場合、sortrowstblA を返します。

tblA が timetable である場合、この構文はサポートされません。

tblB = sortrows(tblA,rowDimName) は最初の次元に沿って、行ラベル rowDimNametblA を並べ替えます。

  • tblA が table の場合、行ラベルは行名です。

  • tblA が timetable の場合、行ラベルは行時間です。

tblB = sortrows(tblA,vars) は、vars で指定した変数の要素で table を並べ替えます。たとえば、sortrows(tblA,{'Var1','Var2'})tblA の行をまず Var1 の要素に基づいて並べ替え、次に Var2 の要素に基づいて並べ替えます。

  • tblA が table で行名がある場合、vars は行名を含むことができます。

  • tblA が timetable の場合、vars は行時間を含むことができます。

tblB = sortrows(___,direction) は前述の table 構文のいずれについても、direction で指定した順序で tblA を並べ替えます。direction'ascend''descend' のいずれかで、sortrows の操作対象として指定したすべての変数、行名または行時間に適用されます。direction は要素が 'ascend''descend' である cell 配列にすることもでき、この場合、各要素は並べ替え基準として指定した変数、行名または行時間に対応します。

tblB = sortrows(___,Name,Value) は、table または timetable の行を並べ替えるための追加パラメーターを指定します。たとえば、sortrows(tblA,'Var1','MissingPlacement','first')Var1 の要素に基づいて並べ替えを行い、NaN などの欠損値がある要素を table の最初に配置します。

[tblB,index] = sortrows(___) は、tblB = tblA(index,:) となるようなインデックス ベクトルも返します。

すべて折りたたむ

行列を作成し、1 列目の要素に基づいて行を昇順に並べ替えます。1 列目の列に繰り返されている要素がある場合、sortrows は 2 列目の要素を参照して同順位のものを並べ替えます。2 列目に繰り返されている要素がある場合、sortrows は 3 列目を参照し、以下同様に処理されます。

rng default;
A = floor(rand([6 7])*100);
A(1:4,1) = 95;  A(5:6,1) = 76;  A(2:4,2) = 7;  A(3,3) = 48
A = 6×7

    95    27    95    79    67    70    69
    95     7    48    95    75     3    31
    95     7    48    65    74    27    95
    95     7    14     3    39     4     3
    76    15    42    84    65     9    43
    76    97    91    93    17    82    38

B = sortrows(A) 
B = 6×7

    76    15    42    84    65     9    43
    76    97    91    93    17    82    38
    95     7    14     3    39     4     3
    95     7    48    65    74    27    95
    95     7    48    95    75     3    31
    95    27    95    79    67    70    69

A の行を 2 列目の値に基づいて並べ替えます。指定された列に繰り返されている要素がある場合、対応する行は元の順序を保持します。

C = sortrows(A,2)
C = 6×7

    95     7    48    95    75     3    31
    95     7    48    65    74    27    95
    95     7    14     3    39     4     3
    76    15    42    84    65     9    43
    95    27    95    79    67    70    69
    76    97    91    93    17    82    38

A の行を 1 列目の要素に基づいて並べ替え、同順位の行があれば 7 列目を参照して並べ替えます。

D = sortrows(A,[1 7])
D = 6×7

    76    97    91    93    17    82    38
    76    15    42    84    65     9    43
    95     7    14     3    39     4     3
    95     7    48    95    75     3    31
    95    27    95    79    67    70    69
    95     7    48    65    74    27    95

A の行を 4 列目の要素に基づいて降順に並べ替え、出力ベクトル index を表示して行の並べ替えを確認します。

[E,index] = sortrows(A,4,'descend')
E = 6×7

    95     7    48    95    75     3    31
    76    97    91    93    17    82    38
    76    15    42    84    65     9    43
    95    27    95    79    67    70    69
    95     7    48    65    74    27    95
    95     7    14     3    39     4     3

index = 6×1

     2
     6
     5
     1
     3
     4

複素数を含む行列を作成し、この行列の行を 1 列目の要素に基づいて昇順に並べ替えます。A(1,1)A(3,1) の大きさは等しいため、sortrows はそれらの角度を計算して並べ替え順序を決定します。

A = [1+2i 3+i i; 2+10i 6i 2+5i; 2+i 4 3+3i]
A = 3×3 complex

   1.0000 + 2.0000i   3.0000 + 1.0000i   0.0000 + 1.0000i
   2.0000 +10.0000i   0.0000 + 6.0000i   2.0000 + 5.0000i
   2.0000 + 1.0000i   4.0000 + 0.0000i   3.0000 + 3.0000i

B = sortrows(A)
B = 3×3 complex

   2.0000 + 1.0000i   4.0000 + 0.0000i   3.0000 + 3.0000i
   1.0000 + 2.0000i   3.0000 + 1.0000i   0.0000 + 1.0000i
   2.0000 +10.0000i   0.0000 + 6.0000i   2.0000 + 5.0000i

angle(A(1,1))
ans = 1.1071
angle(A(3,1))
ans = 0.4636

'real' オプションを使用して、A の行を実数部で並べ替えます。A(2,1)A(3,1) の実数部は等しいため、sortrows は虚数部を使用して並べ替え順序を決定します。

C = sortrows(A,'ComparisonMethod','real')
C = 3×3 complex

   1.0000 + 2.0000i   3.0000 + 1.0000i   0.0000 + 1.0000i
   2.0000 + 1.0000i   4.0000 + 0.0000i   3.0000 + 3.0000i
   2.0000 +10.0000i   0.0000 + 6.0000i   2.0000 + 5.0000i

imag(A(2,1))
ans = 10
imag(A(3,1))
ans = 1

6 行 2 列の文字ベクトルの cell 配列を作成し、行を並べ替えます。結果は国と名前の両方でアルファベット順に並べ替えられたリストです。

A = {'Germany' 'Lukas'; 'USA' 'William'; 'USA' 'Andrew'; ...
'Germany' 'Andreas'; 'USA' 'Olivia'; 'Germany' 'Julia'} 
A = 6x2 cell
    {'Germany'}    {'Lukas'  }
    {'USA'    }    {'William'}
    {'USA'    }    {'Andrew' }
    {'Germany'}    {'Andreas'}
    {'USA'    }    {'Olivia' }
    {'Germany'}    {'Julia'  }

B = sortrows(A)
B = 6x2 cell
    {'Germany'}    {'Andreas'}
    {'Germany'}    {'Julia'  }
    {'Germany'}    {'Lukas'  }
    {'USA'    }    {'Andrew' }
    {'USA'    }    {'Olivia' }
    {'USA'    }    {'William'}

最初に国で並べ替え、次に名前を降順で並べ替えます。

C = sortrows(A,[1 2],{'ascend' 'descend'})
C = 6x2 cell
    {'Germany'}    {'Lukas'  }
    {'Germany'}    {'Julia'  }
    {'Germany'}    {'Andreas'}
    {'USA'    }    {'William'}
    {'USA'    }    {'Olivia' }
    {'USA'    }    {'Andrew' }

table の行を変数値で並べ替えます。

5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。

LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
tblA=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38       71       176       124     93  
    Johnson     43       69       163       109     77  
    Williams    38       64       131       125     83  
    Jones       40       67       133       117     75  
    Brown       49       64       119       122     80  

テーブルの行を並べ替えます。関数 sortrows は行を昇順に並べ替えます。最初に変数 Age で並べ替え、年齢が等しい行が 2 行あれば次に変数 Height で並べ替えます。

tblB = sortrows(tblA)
tblB=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Williams    38       64       131       125     83  
    Smith       38       71       176       124     93  
    Jones       40       67       133       117     75  
    Johnson     43       69       163       109     77  
    Brown       49       64       119       122     80  

5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。

LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
tblA=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38       71       176       124     93  
    Johnson     43       69       163       109     77  
    Williams    38       64       131       125     83  
    Jones       40       67       133       117     75  
    Brown       49       64       119       122     80  

table の行を行名に基づいて昇順に並べ替え、行の並べ替え方法を示すインデックス ベクトルを返します。

[tblB,index] = sortrows(tblA,'RowNames')
tblB=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Brown       49       64       119       122     80  
    Johnson     43       69       163       109     77  
    Jones       40       67       133       117     75  
    Smith       38       71       176       124     93  
    Williams    38       64       131       125     83  

index = 5×1

     5
     2
     4
     1
     3

5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。

LastName = {'Sweet';'Jacobson';'Wang';'Joiner';'Berger'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
tblA=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Sweet       38       71       176       124     93  
    Jacobson    43       69       163       109     77  
    Wang        38       64       131       125     83  
    Joiner      40       67       133       117     75  
    Berger      49       64       119       122     80  

table の行を Height で昇順に並べ替え、次に Weight で降順に並べ替えます。

tblB = sortrows(tblA,{'Height','Weight'},{'ascend','descend'})
tblB=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Wang        38       64       131       125     83  
    Berger      49       64       119       122     80  
    Joiner      40       67       133       117     75  
    Jacobson    43       69       163       109     77  
    Sweet       38       71       176       124     93  

5 人の患者情報を示す 4 つの変数を含むテーブルを作成します。変数 Weight には欠損値が格納されています。

LastName = {'Sweet';'Jacobson';'Wang';'Joiner';'Berger'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;NaN;131;133;NaN];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)
tblA=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Sweet       38       71       176       124     93  
    Jacobson    43       69       NaN       109     77  
    Wang        38       64       131       125     83  
    Joiner      40       67       133       117     75  
    Berger      49       64       NaN       122     80  

table の行を Weight で昇順に並べ替え、NaN を含む行を最初に配置します。

tblB = sortrows(tblA,'Weight','MissingPlacement','first')
tblB=5×4 table
                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Jacobson    43       69       NaN       109     77  
    Berger      49       64       NaN       122     80  
    Wang        38       64       131       125     83  
    Joiner      40       67       133       117     75  
    Sweet       38       71       176       124     93  

timetable を作成し、行時間で行を並べ替えます。

TimeDuration = [hours(3) hours(2) hours(1) hours(5) hours(6)]';
TT = timetable(TimeDuration,[98;97.5;97.9;98.1;101],[120;111;119;117;118]);
           
B = sortrows(TT,'TimeDuration')
B=5×2 timetable
    TimeDuration    Var1    Var2
    ____________    ____    ____

    1 hr            97.9    119 
    2 hr            97.5    111 
    3 hr              98    120 
    5 hr            98.1    117 
    6 hr             101    118 

入力引数

すべて折りたたむ

入力配列。列ベクトルまたは行列として指定します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration
複素数のサポート: あり

列並べ替えベクトル。非ゼロ整数スカラーまたは非ゼロ整数のベクトルとして指定します。指定された各整数値は並べ替えの基準にする列を表します。負の整数は並べ替え順序が降順であることを表します。

並べ替える方向。'ascend' (既定) または 'descend' を含む文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。direction が文字ベクトルの cell 配列の場合、エントリ数は並べ替え対象の列または変数の数と一致しなければなりません。

column 引数と direction 引数を同時に指定すると、sortrowsdirection に従って並べ替えを行い、column の要素の符号を無視します。

データ型: char | string | cell

入力 table。table または timetable として指定します。tblA の各変数は、sort または sortrows に対する有効な入力でなければなりません。

データ型: table | timetable

入力 table または timetable の最初の次元の名前。string スカラーまたは文字ベクトルとして指定します。

  • tblA が行名を含む table の場合、rowDimName は table の最初の次元の名前です。既定では、最初の次元の名前は "Row" です。次元名は table のプロパティです。tblA.Properties.DimensionNames を使用すると tblA の次元名にアクセスできます。

  • tblA が timetable の場合、rowDimName は行時間のベクトルの名前です。timetable の作成時に TimeDate などの名前を指定できます。また、tblA.Properties.DimensionNames を使用して次元名にアクセスすることもできます。

例: table T に行名があり、T.Properties.DimensionName{1} = "Name" を使用して最初の次元の名前を変更した場合、sortrows(T,"Name") は行名でこの table を並べ替えます。

例: timetable TTDate という名前の時間ベクトルが含まれる場合、sortrows(TT,"Date") は、Date に含まれる日付と時間に基づいて timetable を並べ替えます。

データ型: string | char

並べ替え変数。スカラー整数、整数のベクトル、変数名、変数名の string 配列、変数名の cell 配列、pattern スカラー、または logical ベクトルとして指定します。vars は並べ替えの基準となる table 変数を示します。

vars の要素が正の整数の場合、sortrows は、tblA の対応する変数を昇順に並べ替えます。vars の要素が負の整数の場合、sortrows は、tblA の対応する変数を降順に並べ替えます。

例: sortrows(tblA,["Height","Weight"])tblA の行を、最初に変数 Height で昇順に並べ替え、次に変数 Weight で同順位のものを並べ替えます。

例: sortrows(tblA,"X" + wildcardPattern) は、名前が "X" の文字で始まる table 変数で tblA の行を昇順に並べ替えます。ここでは、ワイルドカード パターンを使用して名前の残りの部分と一致させています。

例: sortrows(tblA,[1 4])tblA の最初の変数で昇順に並べ替え、次に 4 番目の変数で同順位のものを並べ替えます。

例: sortrows(TT,["Time","X"]) は最初に timetable TT の行時間を昇順に並べ替え、次に table 変数 X で同順位のものを並べ替えます。

データ型: double | single | string | char | cell | pattern | logical

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: sortrows(A,'MissingPlacement','last')

欠損値 (NaNNaT<undefined>missing) の配置。'MissingPlacement' と、次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'auto' — 欠損値の要素は、昇順では最後、降順では最初に配置されます。

  • 'first' — 欠損値の要素は最初に配置されます。

  • 'last' — 欠損値の要素は最後に配置されます。

要素の比較方法。'ComparisonMethod' と以下のいずれかで構成される、コンマ区切りペアとして指定します。

  • 'auto'A の行を、A が実数の場合は real(A)A が複素数の場合は abs(A) を基準にして並べ替えます。

  • 'real'A が実数または複素数の場合、A の行を real(A) を基準にして並べ替えます。A の列に実数部が等しい要素がある場合、imag(A) を使用して同順位のものを並べ替えます。

  • 'abs'A が実数または複素数の場合、A の行を abs(A) を基準にして並べ替えます。A の列に大きさが等しい要素がある場合、区間 (-π,π] で angle(A) を使用して同順位のものを並べ替えます。

出力引数

すべて折りたたむ

並べ替えられた配列。ベクトル、行列または多次元配列として返されます。B のサイズは A と同じです。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | categorical | datetime | duration

並べ替えられた table。tblA と同じ変数をもつ table または timetable として返されます。

データ型: table | timetable

並べ替えインデックス。インデックス ベクトルとして返されます。並べ替えインデックスは、B = A(index,:) となる入力の行の並べ替えを示します。

関数 sortrows は安定した並べ替えアルゴリズムを使用します。そのため、入力に繰り返しの値が含まれている場合、並べ替えインデックスは、並べ替えの方向に関係なく、入力における元の順序のままになります。たとえば、A = [1 1; 2 2; 1 2; 2 2] の場合、[Ba,Ia] = sortrows(A,'ascend') は並べ替えインデックス Ia = [1; 3; 2; 4] を返し、[Bd,Id] = sortrows(A,'descend') は並べ替えインデックス Id = [2; 4; 3; 1] を返します。

データ型: double

拡張機能

バージョン履歴

R2006a より前に導入