最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

categorical 配列によるデータへのアクセス

カテゴリ別のデータの選択

値に基づいてデータを選択できると便利な場合がよくあります。このようなタイプのデータ選択では、ある変数の値に基づいて論理ベクトルを作成してから、その論理ベクトルを使用して他の変数の値のサブセットを選択する必要があることがあります。データ選択に使用する論理ベクトルは、数値配列で特定の範囲に該当する値を見つけることによって作成できます。また、個々の離散値を見つけて論理ベクトルを作成することもできます。categorical 配列を使用すると、次の操作が簡単にできるようになります。

  • 特定カテゴリの要素の選択。categorical 配列では、論理演算子 == または ~= を使用して、特定のカテゴリに該当するデータまたは該当しないデータを選択することができます。特定のカテゴリ グループのデータを選択するには、関数 ismember を使用します。

    順序 categorical 配列では、不等号 >>=< または <= を使用して、特定のカテゴリよりも順序が先または後のカテゴリのデータを見つけることができます。

  • 特定のカテゴリに該当するデータの削除。論理演算子を使用して、特定のカテゴリのデータを抽出または除外することができます。

  • 定義済みカテゴリに該当しない要素の検索。categorical 配列では、定義済みカテゴリに該当しない要素を <undefined> で表します。関数 isundefined を使用して、定義された値をもたない観測値を見つけることができます。

categorical 配列による一般的なデータ アクセス方法

この例では、categorical 配列を使用してインデックス付けと検索を行う方法を示します。同様の方法で、テーブル内に格納されている categorical 配列を使用してデータにアクセスすることができます。

サンプル データの読み込み

100 名の患者から収集されたサンプル データを読み込みます。

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             12212  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             12416  cell                 
  Location                      100x1             15008  cell                 
  SelfAssessedHealthStatus      100x1             12340  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

文字ベクトルの cell 配列からの categorical 配列の作成

Gender および Location にはカテゴリに属するデータが含まれています。各 cell 配列には、小規模な、一意の値 (それぞれ 2 つの性別と 3 つの場所を示す) のセットから取得した文字ベクトルが含まれています。Gender および Location を categorical 配列に変換します。

Gender = categorical(Gender);
Location = categorical(Location);

単一カテゴリのメンバーの検索

categorical 配列では、論理演算子 == および ~= を使用して、特定のカテゴリに該当するデータまたは該当しないデータを見つけることができます。

場所 'Rampart General Hospital' で調査された患者がいるかどうかを判定します。

any(Location=='Rampart General Hospital')
ans = logical
   0

Rampart General Hospital で調査された患者はいません。

複数カテゴリのメンバーの検索

ismember を使用して、特定のグループのカテゴリのデータを見つけることができます。County General Hospital または VA Hospital で調査された患者の logical ベクトルを作成します。

VA_CountyGenIndex = ...
    ismember(Location,{'County General Hospital','VA Hospital'});

VA_CountyGenIndex は 100 行 1 列の logical 配列で、categorical 配列 Location 内のカテゴリ County General Hospital または VA Hospital のメンバーである各要素について論理値 true (1) をもちます。出力 VA_CountyGenIndex には 76 個の非ゼロ要素が含まれています。

logical ベクトル VA_CountyGenIndex を使用して、County General HospitalVA Hospital のいずれかで調査された患者の LastName を選択します。

VA_CountyGenPatients = LastName(VA_CountyGenIndex);

VA_CountyGenPatients は、76 行 1 列の文字ベクトルの cell 配列です。

プロットする特定のカテゴリの要素の選択

関数 summary を使用して、カテゴリ名と各カテゴリの要素数を含む概要を出力します。

summary(Location)
     County General Hospital        39 
     St. Mary's Medical Center      24 
     VA Hospital                    37 

Location は、3 つのカテゴリをもつ 100 行 1 列の categorical 配列です。County General Hospital は 39 個の要素、St. Mary s Medical Center は 24 個の要素、VA Hospital は 37 個の要素で出現します。

関数 summary を使用して、Gender の概要を出力します。

summary(Gender)
     Female      53 
     Male        47 

Gender は、2 つのカテゴリをもつ 100 行 1 列の categorical 配列です。Female は 53 個の要素、Male は 47 個の要素で出現します。

論理演算子 == を使用して、女性患者のみの年齢データにアクセスします。その後、このデータのヒストグラムをプロットします。

figure()
histogram(Age(Gender=='Female'))
title('Age of Female Patients')

histogram(Age(Gender=='Female')) は、53 名の女性患者の年齢データをプロットします。

特定のカテゴリのデータの削除

論理演算子を使用すると、特定のカテゴリのデータを抽出または除外することができます。VA Hospital で調査されたすべての患者をワークスペース変数 Age および Location から削除します。

Age = Age(Location~='VA Hospital');
Location = Location(Location~='VA Hospital');

すると、Age が 63 行 1 列の数値配列、Location が 63 行 1 列の categorical 配列になります。

Location のカテゴリのリストが各カテゴリの要素数と共に表示されます。

summary(Location)
     County General Hospital        39 
     St. Mary's Medical Center      24 
     VA Hospital                     0 

VA Hospital で調査された患者のデータは Location から削除されていますが、まだ VA Hospital はカテゴリとして残っています。

関数 removecats を使用して、Location のカテゴリから VA Hospital を削除します。

Location = removecats(Location,'VA Hospital');

カテゴリ VA Hospital が削除されたことを確認します。

categories(Location)
ans = 2x1 cell array
    {'County General Hospital'  }
    {'St. Mary's Medical Center'}

Location は、63 行 1 列の categorical 配列で、2 つのカテゴリを含んでいます。

要素の削除

インデックスを付けることで要素を削除できます。たとえば、Location の最初の要素は、Location(2:end) を使用して残りの要素を選択することで削除できます。より簡単に要素を削除するには、[] を使用します。

Location(1) = [];
summary(Location)
     County General Hospital        38 
     St. Mary's Medical Center      24 

Location は、62 行 1 列の categorical 配列で、2 つのカテゴリを含んでいます。最初の要素を削除しても、同じカテゴリの他の要素には影響せず、カテゴリ自体も削除されません。

未定義データの確認

カテゴリ County General HospitalLocation から削除します。

Location = removecats(Location,'County General Hospital');

categorical 配列 Location の最初から 8 番目までの要素を表示します。

Location(1:8)
ans = 8x1 categorical array
     St. Mary's Medical Center 
     <undefined> 
     St. Mary's Medical Center 
     St. Mary's Medical Center 
     <undefined> 
     <undefined> 
     St. Mary's Medical Center 
     St. Mary's Medical Center 

カテゴリ County General Hospital を削除すると、そのカテゴリに属していた要素は Location について定義されているいずれのカテゴリにも属さなくなります。categorical 配列では、これらの要素は undefined として示されます。

関数 isundefined を使用して、どのカテゴリにも属さない観測値を見つけます。

undefinedIndex = isundefined(Location);

undefinedIndex は 62 列 1 行の categorical 配列で、Location のすべての未定義要素について論理値 true (1) をもちます。

未定義の要素の設定

関数 summary を使用して、Location 内の未定義の要素数を出力します。

summary(Location)
     St. Mary's Medical Center      24 
     <undefined>                    38 

Location の最初の要素はカテゴリ St. Mary's Medical Center に属します。この最初の要素を undefined に設定して、どのカテゴリにも属さないようにします。

Location(1) = '<undefined>';
summary(Location)
     St. Mary's Medical Center      23 
     <undefined>                    39 

カテゴリを削除したり、その他の要素のカテゴリを変更したりせずに、選択した要素を undefined にできます。要素を undefined に設定して、不明な値をもつ要素を表します。

未定義の要素をもつ categorical 配列の事前割り当て

パフォーマンス向上のため、未定義の要素を使用して categorical 配列のサイズを事前に割り当てることができます。場所がわかっている要素だけをもつ categorical 配列を作成します。

definedIndex = ~isundefined(Location);
newLocation = Location(definedIndex);
summary(newLocation)
     St. Mary's Medical Center      23 

newLocation のサイズを拡張して 200 行 1 列の categorical 配列にします。最後の新しい要素を undefined に設定します。その他の新しい要素もすべて undefined に設定されます。元の 23 個の要素はその値を保持します。

newLocation(200) = '<undefined>';
summary(newLocation)
     St. Mary's Medical Center       23 
     <undefined>                    177 

newLocation には、後で配列に格納する値のためのスペースがあります。

参考

| | | | | |

関連する例

詳細