ドキュメンテーション

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

categorical

カテゴリに割り当てられた値を含む配列

説明

categorical は、HighMedLow などの離散カテゴリの有限集合に値を割り当てるデータ型です。これらのカテゴリには High > Med > Low などの数学的な順序を指定することができますが、必須ではありません。categorical 配列は、非数値データを効率的に格納し操作するのに適しており、値に付けられたわかりやすい名前も維持されます。一般的に、categorical 配列は table の行のグループを指定するために使用します。

作成

構文

B = categorical(A)
B = categorical(A,valueset)
B = categorical(A,valueset,catnames)
B = categorical(A,___,Name,Value)

説明

B = categorical(A) は、配列 A から categorical 配列を作成します。B のカテゴリは、A からの並べ替えられた一意の値です。

B = categorical(A,valueset) は、valueset の値ごとに 1 つのカテゴリを作成します。B のカテゴリは、valueset の値と同じ順序になります。

valueset を使用して、A には存在しない値のカテゴリを含めることができます。逆に、valueset に存在しない値が A に含まれている場合は、B の対応する要素が定義されません。

B = categorical(A,valueset,catnames) は、valueset のカテゴリ値と catnames の名前をマッチングさせて B のカテゴリに名前を付けます。

B = categorical(A,___,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、categorical 配列を作成します。前述の構文のいずれかの入力引数を含めることができます。

たとえば、カテゴリが数学的な順序になることを示すには、'Ordinal',true を指定します。

入力引数

すべて展開する

入力配列。数値配列、logical 配列、categorical 配列、datetime 配列、duration 配列、string 配列、または文字ベクトルの cell 配列として指定します。

categorical は、string または文字ベクトルである入力値から先頭のスペースと末尾のスペースを削除します。

A に欠損値が含まれる場合、B の対応する要素は定義されず、<undefined> として表示されます。関数 categorical は、次の値を未定義の categorical 値に変換します。

  • 数値配列および duration 配列内の NaN

  • string 配列内の欠損 string (<missing>) または空の string ("")

  • 文字ベクトルの cell 配列内にある空の文字ベクトル ('')

  • datetime 配列内の NaT

  • categorical 配列内の未定義値 (<undefined>)

B には未定義値のカテゴリが含まれません。欠損値または未定義値の明示的なカテゴリを作成するには、catnames に目的のカテゴリ名を含め、さらに欠損値を対応する値として valueset に含めなければなりません。

また、A は次のクラス メソッドをもつオブジェクトの配列にすることもできます。

  • unique

  • eq

カテゴリ。一意の値のベクトルとして指定します。valueset のデータ型と A のデータ型は同じでなければなりません。ただし、A が string 配列の場合を除きます。その場合、valueset は string 配列または文字ベクトルの cell 配列のいずれかにすることができます。

categorical は、string または文字ベクトルである valueset の要素から先頭のスペースと末尾のスペースを削除します。

カテゴリ名。文字ベクトルの cell 配列、または string 配列として指定します。入力引数 catnames を指定しない場合、categoricalvalueset の値をカテゴリ名として使用します。

A の複数の異なる値を B の 1 つのカテゴリにマージするには、それらの値に対応する重複した名前を含めます。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'Ordinal',true は、カテゴリが数学的な順序になることを指定します。

並べ替え順序インジケーター。'Ordinal'false (0) または true (1) のいずれかで構成されるコンマ区切りのペアとして指定します。

false (0)

categorical は、順序がない categorical 配列を作成します。これは既定の動作です。

B のカテゴリは数学的な順序ではありません。したがって、等価性に関する B の値の比較のみができます。

true (1)

categorical は、順序 categorical 配列を作成します。

B のカテゴリには数学的な順序があるため、最初に指定されるカテゴリは最小で、最後のカテゴリは最大になります。B の値は、値の等価性を比較するだけでなく、< (より小さい) や > (より大きい) などの関係演算子を使用して比較できます。関数 min および max を順序 categorical 配列に対して使用することもできます。

詳細については、順序 categorical 配列を参照してください。

カテゴリ保護インジケーター。'Protected'false (0) または true (1) のいずれかで構成されるコンマ区切りのペアとして指定します。順序 categorical 配列のカテゴリは常に保護されます。'Ordinal',true を指定したときの既定値は true です。それ以外の場合は、値は false です。

false (0)

新しい値を B に代入すると、カテゴリは自動的に更新されます。したがって、異なるカテゴリをもつ (非順序) categorical 配列を組み合わせることができます。それに伴って、両方の配列のカテゴリを含めてカテゴリを更新することができます。

true (1)

新しい値を B に代入する場合、値は既存のカテゴリの 1 つに属していなければなりません。したがって、同じカテゴリをもつ配列のみを組み合わせることができます。新しいカテゴリを B に追加するには、関数 addcats を使用しなければなりません。

すべて折りたたむ

気象計のラベルをもつ categorical 配列を作成します。それを温度測定値の table に追加します。次に、そのカテゴリを使用して、気象計別に温度測定値を選択します。

まず、温度測定値、日付、および気象計のラベルを含む配列を作成します。

Temps = [58; 72; 56; 90; 76];
Dates = {'2017-04-17';'2017-04-18';'2017-04-30';'2017-05-01';'2017-04-27'};
Stations = {'S1';'S2';'S1';'S3';'S2'};

Stations を categorical 配列に変換します。

Stations = categorical(Stations)
Stations = 5x1 categorical array
     S1 
     S2 
     S1 
     S3 
     S2 

そのカテゴリを表示します。3 つの気象計のラベルがカテゴリです。

categories(Stations)
ans = 3x1 cell array
    {'S1'}
    {'S2'}
    {'S3'}

温度、日付、および気象計のラベルを含む table を作成します。

T = table(Temps,Dates,Stations)
T=5×3 table
    Temps       Dates        Stations
    _____    ____________    ________

     58      '2017-04-17'       S1   
     72      '2017-04-18'       S2   
     56      '2017-04-30'       S1   
     90      '2017-05-01'       S3   
     76      '2017-04-27'       S2   

気象計 S2 から取得した測定値を表示します。== 演算子を使用して S2 と等価の Station 値を見つけることができます。次に、論理インデックス付けを使用して、気象計 S2 からのデータを含む table 行を選択します。

TF = (T.Stations == 'S2');
T(TF,:)
ans=2×3 table
    Temps       Dates        Stations
    _____    ____________    ________

     72      '2017-04-18'       S2   
     76      '2017-04-27'       S2   

文字ベクトルの cell 配列 A を categorical 配列に変換します。A に存在しない値を含むカテゴリのリストを指定します。

文字ベクトルの cell 配列を作成します。

A = {'republican' 'democrat'; 'democrat' 'democrat'; 'democrat' 'republican'};

A を categorical 配列に変換します。 independent のカテゴリを追加します。

valueset = {'democrat' 'republican' 'independent'};
B = categorical(A,valueset)
B = 3x2 categorical array
     republican      democrat   
     democrat        democrat   
     democrat        republican 

B のカテゴリを表示します。

categories(B)
ans = 3x1 cell array
    {'democrat'   }
    {'republican' }
    {'independent'}

数値配列を作成します。

A = [1 3 2; 2 1 3; 3 1 2]
A = 3×3

     1     3     2
     2     1     3
     3     1     2

A を categorical 配列 B に変換して、カテゴリ名を指定します。

B = categorical(A,[1 2 3],{'red' 'green' 'blue'})
B = 3x3 categorical array
     red        blue      green 
     green      red       blue  
     blue       red       green 

B のカテゴリを表示します。

categories(B)
ans = 3x1 cell array
    {'red'  }
    {'green'}
    {'blue' }

B は順序 categorical 配列でありません。したがって、B 内の値の比較には、等価演算子 == および ~= のみを使用できます。

カテゴリ 'red' に属する要素を検索します。論理インデックス付けを使用してこれらの要素にアクセスします。

TF = (B == 'red');
B(TF)
ans = 3x1 categorical array
     red 
     red 
     red 

5 行 2 列の数値配列を作成します。

A = [3 2;3 3;3 2;2 1;3 2]
A = 5×2

     3     2
     3     3
     3     2
     2     1
     3     2

A を順序 categorical 配列に変換します。ここで、123 は、それぞれカテゴリ childadultsenior を表します。

valueset = [1:3];
catnames = {'child' 'adult' 'senior'};

B = categorical(A,valueset,catnames,'Ordinal',true)
B = 5x2 categorical array
     senior      adult  
     senior      senior 
     senior      adult  
     adult       child  
     senior      adult  

B は順序配列であるため、B のカテゴリは、数学的な順序 child < adult < senior になります。

R2017a 以降、二重引用符を使用して string 配列を作成できるようになりました。また、string 配列は欠損値を含むこともできます。これは、引用符なしで <missing> として表示されます。

str = ["plane","jet","plane","helicopter",missing,"jet"]
str = 1x6 string array
    "plane"    "jet"    "plane"    "helicopter"    <missing>    "jet"

string 配列 str を categorical 配列に変換します。関数 categorical は欠損 string を未定義の categorical 値に変換します。これは、<undefined> として表示されます。

C = categorical(str)
C = 1x6 categorical array
     plane      jet      plane      helicopter      <undefined>      jet 

100 個の乱数を 3 つのカテゴリにビニングするには、関数 discretize (categorical の代わりに) を使用します。

x = rand(100,1);
y = discretize(x,[0 .25 .75 1],'categorical',{'small','medium','large'});
summary(y)
     small       22 
     medium      46 
     large       32 

ヒント

  • categorical 配列を受け入れる関数、または返す関数の一覧については、categorical 配列を参照してください。

代替方法

関数 discretize を使用して、数値データをカテゴリ別にグループ化することもできます。

拡張機能

R2013b で導入