メインコンテンツ

topkrows

並べ替えられた上位の行

説明

配列データ

B = topkrows(X,k)X 内の行を並べ替え、並べ替え後のデータから上位 k 行を返します。行は、数値データの場合は降順、テキスト データの場合はアルファベットの降順に並べ替えられます。topkrows は最初の列の要素を基準として並べ替えます。1 列目に等しい値の要素が複数存在する場合、topkrows は 2 列目の要素を基準として並べ替え、その後の等しい値についても同じ動作を繰り返します。

B = topkrows(X,k,col) は、col で指定された列に基づいて結果を並べ替えます。この構文を使用して、列の並べ替えを連続して複数回実行します。たとえば、topkrows(X,k,5) は、X の行を 5 列目の要素に基づいて降順で並べ替えます。topkrows(X,k,[4 6]) は、まず行を 4 列目の要素に基づいて降順で並べ替え、次に 6 列目の要素に基づいて同順位のものを並べ替えます。

B = topkrows(X,___,direction) は、前述の構文のいずれかを使って並べ替えの方向を指定します。

たとえば、topkrows(A,2,[2 3],{'ascend' 'descend'}) は、まず 2 列目の要素に基づいて昇順で行を並べ替えることにより、上位 2 行を取得します。次に、2 列目の等しいエントリがある行を、3 列目の要素に基づいて降順で並べ替えます。

B = topkrows(X,___,'ComparisonMethod',method)X 内の複素数の比較方法を指定します。比較方法は、'auto''real''abs' のいずれかにすることができます。

[B,I] = topkrows(X,___) はインデックス ベクトル I も返します。これは選択した行の順序を B = X(I,:) のように示します。

テーブル データ

B = topkrows(T,k) は、table または timetable T の最初の k 行を、順序を並べ替えて返します。table の行はすべての変数の降順で並べ替えられ、timetable の行は時間の降順で並べ替えられます。

B = topkrows(T,k,vars)vars によって指定された変数で結果を並べ替えます。この構文を使用して、複数の変数による連続した並べ替えを行います。たとえば、topkrows(T,k,{'Var1','Var2'})T の行をまず Var1 の要素に基づいて並べ替え、次に Var2 の要素に基づいて並べ替えます。

B = topkrows(T,k,vars,direction) は並べ替えの方向を指定します。たとえば、T を昇順に並べ替えるには 'ascend' を使用します。

B = topkrows(T,k,vars,___,'ComparisonMethod',method)T 内の複素数の比較方法を指定します。

[B,I] = topkrows(T,___) はインデックス ベクトル I も返します。これは選択した行の順序を B = T(I,:) のように示します。

すべて折りたたむ

さまざまな並べ替え順序を使用して行列の行を並べ替え、上位の行を表示します。

1 ~ 10 のランダムな整数から成る 20 行 5 列の行列を作成します。

rng default % for reproducibility
X = randi(10,20,5);

X の行を降順に並べ替え、上位 4 行を返します。既定では、topkrows は行列の最初の列を使用して並べ替えます。特定の列に等しい要素がある行は、そのすぐ右の列を基準として並べ替えます。

TA = topkrows(X,4)
TA = 4×5

    10    10     8     7     6
    10     7     8     2     4
    10     4     4     3     5
    10     3     7     9     6

入力引数を 3 つ使用して topkrows を呼び出した場合、3 番目の引数で指定された列のみに基づいて並べ替えます。つまり、指定された列の等しい値がある行は、元の順序のままとなります。3 列目の値を使用して X を降順に並べ替え、上位 5 行を返します。

TB = topkrows(X,5,3)
TB = 5×5

     5     7    10     2     6
     2     9     8     6     6
    10    10     8     7     6
    10     7     8     2     4
    10     2     8     3     6

3 列目と 4 列目の両方を使用して X を並べ替えます。この場合、topkrows は 3 列目を基準として行を並べ替えます。次に 3 列目の等しい値がある行については、4 列目を基準にして並べ替えます。

TC = topkrows(X,5,[3 4])
TC = 5×5

     5     7    10     2     6
    10    10     8     7     6
     2     9     8     6     6
    10     2     8     3     6
    10     7     8     2     4

複数の列を使用して、異なる並べ替え方向で行列を並べ替えます。

1 ~ 10 のランダムな整数から成る 100 行 5 列の行列を作成します。

rng default % for reproducibility
X = randi(10,100,5);

最初の 3 列を使用して X を並べ替え、上位 10 行を返します。cell 配列を使用して各列の並べ替え方向を指定します。

TA = topkrows(X,10,1:3,{'descend','ascend','ascend'})
TA = 10×5

    10     1     4     6     7
    10     1     8     5     1
    10     2     3     4     7
    10     3     5    10     5
    10     4     7     2     4
    10     5     5     2     7
    10     5     5     6     7
    10     6     5     5     7
    10     6     6     1     5
    10     7     7     8     1

table の異種混合データの行を並べ替えます。

patients.mat データ セットから table を作成します。これには、患者グループの基本的な健康情報が含まれています。table には患者の年齢、性別、身長、自己申告の健康状態が含まれます。変数 SelfAssessedHealthStatus を順序 categorical 配列にします。

load patients
vals = ["Poor" "Fair" "Good" "Excellent"];
SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus,vals,Ordinal=true);
T = table(Age,Smoker,Height,SelfAssessedHealthStatus)
T=100×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    38     true        71             Excellent        
    43     false       69             Fair             
    38     false       64             Good             
    40     false       67             Fair             
    49     false       64             Good             
    46     false       68             Good             
    33     true        64             Good             
    40     false       68             Good             
    28     false       68             Excellent        
    31     false       66             Excellent        
    45     false       68             Excellent        
    42     false       66             Poor             
    25     false       71             Poor             
    39     true        72             Excellent        
    36     false       65             Good             
    48     true        71             Good             
      ⋮

table を降順に並べ替えて上位 10 行を特定します。結果は最初の変数 Age を基準に降順で並べ替えられます。残りの列では、同順位のものが並べ替えられます。

  • Smoker 変数は年齢で同順位となった要素をさらに並べ替えます。

  • Height 変数は喫煙状況が同じ場合の並べ順を決定します。

  • 変数 SelfAssessedHealthStatus は身長で同順位となった場合の並び順を決定します。

TA = topkrows(T,10)
TA=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    50     true        72             Excellent        
    50     false       68             Good             
    49     true        68             Poor             
    49     true        63             Good             
    49     false       70             Fair             
    49     false       64             Good             
    48     true        71             Good             
    48     true        64             Excellent        
    48     false       71             Good             
    48     false       66             Excellent        

Smoker 変数で並べ替え、その後、Age 変数でサブソートすることで、年齢が最も低い非喫煙者の上位 10 行を特定します。

TB = topkrows(T,10,["Smoker" "Age"],"ascend")
TB=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    25     false       71             Poor             
    25     false       70             Poor             
    25     false       63             Good             
    25     false       64             Excellent        
    25     false       66             Good             
    28     false       68             Excellent        
    28     false       65             Good             
    28     false       66             Good             
    29     false       63             Excellent        
    29     false       68             Excellent        

Age 変数の並べ替え方向を "descend" に変更して、年齢の高い上位 10 名の非喫煙者を特定します。

TB = topkrows(T,10,["Smoker" "Age"],["ascend" "descend"])
TB=10×4 table
    Age    Smoker    Height    SelfAssessedHealthStatus
    ___    ______    ______    ________________________

    50     false       68             Good             
    49     false       64             Good             
    49     false       70             Fair             
    48     false       65             Excellent        
    48     false       66             Excellent        
    48     false       64             Good             
    48     false       71             Good             
    48     false       66             Excellent        
    48     false       66             Fair             
    47     false       70             Excellent        

複素数の行列を絶対値で並べ替えた後に、実数部で並べ替えます。

ランダムな複素数から成る 100 行 2 列の行列を作成します。

valRange = [-10 10];
X = randi(valRange,100,2) + 1i*randi(valRange,100,2);

行列の上位 10 行を特定します。既定では、topkrows は絶対値を基準にして複素数を比較します。

TA = topkrows(X,10)
TA = 10×2 complex

 -10.0000 + 9.0000i  10.0000 - 2.0000i
  -8.0000 + 9.0000i   2.0000 - 8.0000i
   9.0000 + 8.0000i   4.0000 + 7.0000i
  -6.0000 +10.0000i  -8.0000 - 7.0000i
   6.0000 -10.0000i  -1.0000 - 5.0000i
   6.0000 -10.0000i   0.0000 + 5.0000i
  -7.0000 + 9.0000i  -2.0000 - 5.0000i
   9.0000 - 7.0000i  10.0000 + 7.0000i
   9.0000 - 7.0000i   6.0000 + 6.0000i
  -9.0000 - 7.0000i   9.0000 + 9.0000i

'ComparisonMethod' の名前と値のペアを指定して、複素数の実数部のみを使用して、行列の上位 10 行を特定します。

TB = topkrows(X,10,'ComparisonMethod','real')
TB = 10×2 complex

  10.0000 + 4.0000i  -3.0000 - 7.0000i
  10.0000 + 3.0000i   4.0000 + 5.0000i
  10.0000 + 2.0000i   5.0000 - 7.0000i
  10.0000 - 1.0000i  -1.0000 - 8.0000i
  10.0000 - 1.0000i  -6.0000 +10.0000i
  10.0000 - 4.0000i  -9.0000 + 0.0000i
  10.0000 - 5.0000i  -8.0000 - 3.0000i
   9.0000 + 8.0000i   4.0000 + 7.0000i
   9.0000 + 5.0000i -10.0000 + 0.0000i
   9.0000 + 1.0000i   1.0000 - 9.0000i

入力引数

すべて折りたたむ

入力配列。数値配列、logical 配列、文字配列、string 配列、categorical 配列、datetime 配列、duration 配列として指定します。

  • X が非順序 categorical 配列である場合、topkrowscategories(X) によって返されたカテゴリの順序に基づいて要素を降順に並べ替えます。

  • XNaNNaT、またはその他の欠損値が含まれる場合、topkrows はその欠損値を降順の並べ替えの最後に配置します。

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

入力 table。table または timetable として指定します。

データ型: table | timetable

返す行数。非負のスカラー整数として指定します。kX の行数より多い場合、topkrowsX のすべての行を返します。

並べ替えの基準となる列。正のスカラー整数または正の整数のベクトルとして指定します。

例: B = topkrows(X,100,[1 3]) は、1 列目と 3 列目を基準として並べ替えてから、上位 100 行を返します。

並べ替えの基準となる変数。次の表のオプションのいずれかとして指定します。

オプション説明
正の整数topkrows(T,k,3)整数 n は並べ替えの基準となる変数のインデックスを指定します。T.Properties.VariableNames{n} によって返されます。
正の整数のベクトルtopkrows(T,k,[1 3])ベクトル [n1 n2 …] は並べ替えの基準となる複数の変数のインデックスを指定します。T.Properties.VariableNames{[n1 n2 …]} によって返されます。
logical ベクトルtopkrows(T,k,[true false true])true または false を使用して、並べ替えの基準となる変数を 1 つ以上指定します。
変数名topkrows(T,k,"Var3")並べ替え変数を T.Properties.VariableNames にリストされた変数名のいずれかとして指定します。
string 配列topkrows(T,k,["Var1","Var3"])T.Properties.VariableNames から選択した複数の並べ替え変数を指定します。
文字ベクトルの cell 配列topkrows(T,k,{'Var1','Var3'})T.Properties.VariableNames から選択した複数の並べ替え変数を指定します。
pattern スカラーtopkrows(T,k,"V" + wildcardPattern)T.Properties.VariableNames から選択した複数の並べ替え変数を指定します。
'RowNames'topkrows(T,k,'RowNames')table のみ。このオプションは、行名を基準として結果を並べ替えます。

例: B = topkrows(X,k,[1 3]) は 1 列目と 3 列目を基準として並べ替えます。

例: B = topkrows(X,k,"Year") は変数 Year を使用して並べ替えます。

並べ替えの方向。'descend''ascend'、あるいはこれらの値の組み合わせを指定する string 配列または文字ベクトルの cell 配列として指定します。

direction が cell 配列の場合、col または vars によって指定される各並べ替え列に対して、'descend' または 'ascend' が含まれなければなりません。col または vars を指定しない場合は、X の各列または T の変数に対して、cell 配列に 'descend' または 'ascend' が含まれなければなりません。

数値入力の比較方法。次の値のいずれかとして指定します。

  • 'auto' — (既定) 'real' に従って実数を比較、'abs' に従って複素数を比較。

  • 'real' — 実数部 real(A) によって数値を比較。実数部が等しい数値は、虚数部 imag(A) でサブソート。

  • 'abs' — 絶対値 abs(A) によって数値を比較。振幅が等しい数値は、位相角 angle(A) でサブソート。

出力引数

すべて折りたたむ

要求した行は、配列、table、または timetable として返されます。B は入力データと同じ型です。

行インデックス。列ベクトルとして返されます。I は選択した行の順序を B = X(I,:) または B = T(I,:) のように示します。

ヒント

  • topkrows は入力データ全体の並べ替えは行わないため、要求した行数が少ない場合は通常 sortsortrows より高速です。

拡張機能

すべて展開する

バージョン履歴

R2016b で導入

すべて展開する

参考

| | | | |