Main Content

ノミナル配列と順序配列を使用したインデックス付けと検索

メモ

nominal 配列データ型および ordinal 配列データ型は推奨されません。順序付きおよび順序付けのない離散非数値データを表すには、代わりにcategorical 配列データ型を使用します。

カテゴリ別のインデックス付け

多くの場合、データのインデックス付けおよび検索はカテゴリまたはグループ別に行うと便利です。カテゴリを文字ベクトルの cell 配列または char 配列にラベルとして格納すると、カテゴリのインデックス付けと検索が難しくなる可能性があります。ノミナル配列または順序配列を使用すると、以下を簡単に行うことができます。

  • 特定のカテゴリ要素へのインデックス付け。ノミナル配列と順序配列のどちらの場合でも、論理演算子 == および ~= を使用すると、特定のカテゴリ内に存在する観測値、または特定のカテゴリ以外のカテゴリの観測値にインデックス付けを実行できます。順序がエンコードされているの場合、不等号 >>=<<= を使用すると、特定のカテゴリより上位または下位のカテゴリの観測値を検索することができます。

  • カテゴリのメンバーの検索。論理演算子 == の他に ismember を使用すると、特定のグループの観測値を検索することができます。

  • 定義済みカテゴリに該当しない要素の検索。ノミナル配列と順序配列では、定義済みカテゴリに該当しない要素を <undefined> で表します。カテゴリがない観測値を検索するには、isundefined を使用します。

  • 特定のカテゴリ内に含まれる観測値の削除。論理演算子を使用すると、特定のカテゴリの観測値を抽出または除外することができます。カテゴリからすべての観測を削除しても、カテゴリ レベルは droplevels で削除するまで定義されている状態のままとなります。

一般的なインデックス付けと検索の方法

この例では、一般的なインデックス付けと検索の方法をいくつか紹介します。

標本データを読み込みます。

load carsmall;

char 配列 Origin をノミナル配列に変換します。この変数には標本の各自動車の生産国が格納されています。

Origin = nominal(Origin);

カテゴリ内の観測値を検索します。標本の中にカナダ製の自動車があるかどうか調べます。

any(Origin=='Canada')
ans = logical
   0

標本の中にカナダ製の自動車はありません。

Origin のレベルとなっている国のリストを作成します。

getlevels(Origin)
ans = 1x6 nominal
     France      Germany      Italy      Japan      Sweden      USA 

特定のカテゴリの要素にインデックス付けします。米国製の自動車について加速度の測定値のヒストグラムをプロットします。

figure();
histogram(Acceleration(Origin=='USA'))
title('Acceleration of Cars Made in the USA')

Figure contains an axes object. The axes object with title Acceleration of Cars Made in the USA contains an object of type histogram.

特定のカテゴリ内に含まれる観測値の削除。Origin からスウェーデン製の自動車をすべて削除します。

Origin = Origin(Origin~='Sweden');
any(ismember(Origin,'Sweden'))
ans = logical
   0

Origin からスウェーデン製の自動車が削除されましたが、Sweden はまだ Origin のレベルとして残っています。

getlevels(Origin)
ans = 1x6 nominal
     France      Germany      Italy      Japan      Sweden      USA 

SwedenOrigin のレベルから削除します。

Origin = droplevels(Origin,'Sweden');
getlevels(Origin)
ans = 1x5 nominal
     France      Germany      Italy      Japan      USA 

定義済みカテゴリにない観測の有無を確認します。フランス製の自動車のインデックスを取得します。

ix = find(Origin=='France')
ix = 4×1

    11
    27
    39
    61

フランス製の車は 4 台あります。FranceOrigin のレベルから削除します。

Origin = droplevels(Origin,'France');

削除対象のカテゴリ レベルに要素が存在することを示す警告が返されます。これらの観測は定義済みカテゴリにはないため、undefined と表されています。

Origin(ix)
ans = 4x1 nominal
     <undefined> 
     <undefined> 
     <undefined> 
     <undefined> 

isundefined を使用すると、定義済みカテゴリにない観測を検索できます。

find(isundefined(Origin))
ans = 4×1

    11
    27
    39
    61

これらのインデックスは、カテゴリ FranceOrigin から削除される前にこのカテゴリにあった観測に対応しています。

参考

| |

関連する例

詳細