保護された categorical 配列の操作
この例では、保護されたカテゴリを含む categorical 配列を操作する方法を示します。
関数 categorical
を使用して categorical 配列を作成する場合、カテゴリを保護するかどうかを指定することができます。順序 categorical 配列では常にカテゴリが保護されますが、名前と値のペアの引数 'Protected',true
を使用して、保護された非順序 categorical 配列を作成することもできます。
配列のカテゴリのリストにない値を代入すると、配列が自動的に更新され、その新しい値がカテゴリのリストに含まれます。同様に、異なるカテゴリをもつ (非順序) categorical 配列を結合することができます。その結果作成されるカテゴリには両方の配列のカテゴリが含まれます。
新しい値を "保護された" categorical 配列に代入する場合、その値は既存のいずれかのカテゴリに属していなければなりません。同様に、保護された配列は共に同じカテゴリをもっていなければ結合できません。
2 つの順序 categorical 配列 (カテゴリは常に保護) を結合する場合は、それらの配列のカテゴリが順序を含めて同じでなければなりません。結果として作成される categorical 配列では 1 番目の配列のカテゴリ順序が使用されます。
2 つの順序 categorical 配列 (カテゴリは常に保護) を結合する場合は、それらの配列のカテゴリが順序を含めて同じでなければなりません。
新しいカテゴリを配列に追加するためには、関数 addcats
を使用しなければなりません。
順序 categorical 配列の作成
10 個のオブジェクトのサイズを含む categorical 配列を作成します。値 'S'
、'M'
および 'L'
に対して、名前 small
、medium
および large
を使用します。
A = categorical({'M';'L';'S';'S';'M';'L';'M';'L';'M';'S'},... {'S','M','L'},{'small','medium','large'},'Ordinal',true)
A = 10x1 categorical
medium
large
small
small
medium
large
medium
large
medium
small
A
は 10 行 1 列の categorical 配列です。
A
のカテゴリを表示します。
categories(A)
ans = 3x1 cell
{'small' }
{'medium'}
{'large' }
カテゴリが保護されていることの確認
順序 categorical 配列を作成する場合、カテゴリは常に保護されます。
関数 isprotected
を使用して、A のカテゴリが保護されていることを確認します。
tf = isprotected(A)
tf = logical
1
A
のカテゴリは保護されています。
新しいカテゴリでの値の代入
既存のどのカテゴリにも属していない新しい値を代入しようとすると、MATLAB® はエラーを返します。たとえば、式 A(2) = 'xlarge'
のように、値 'xlarge'
を categorical 配列に代入することはできません。xlarge
は A
のカテゴリではないからです。代わりに、MATLAB® は以下のエラーを返します。
Error using categorical/subsasgn (line 68)
Cannot add a new category 'xlarge' to this categorical array
because its categories are protected. Use ADDCATS to
add the new category.
xlarge
の新しいカテゴリを追加するには、関数 addcats
を使用します。A
は順序配列であるため、新しいカテゴリの順序を指定しなければなりません。
A = addcats(A,'xlarge','After','large');
これで、'xlarge'
に既存のカテゴリができたので、値を代入します。
A(2) = 'xlarge'
A = 10x1 categorical
medium
xlarge
small
small
medium
large
medium
large
medium
small
A
は、small < medium < large < xlarge
である 4 つのカテゴリを含む 10 行 1 列の categorical 配列になりました。
2 つの順序 categorical 配列の結合
5 つの項目のサイズを含む別の順序 categorical 配列 B
を作成します。
B = categorical([2;1;1;2;2],1:2,{'xsmall','small'},'Ordinal',true)
B = 5x1 categorical
small
xsmall
xsmall
small
small
B
は、5 行 1 列の categorical 配列で、xsmall < small
である 2 つのカテゴリを含んでいます。
2 つの順序 categorical 配列 (カテゴリは常に保護) を結合する場合は、それらの配列のカテゴリが順序を含めて同じでなければなりません。
カテゴリ 'xsmall'
を A
のカテゴリ 'small'
の前に追加します。
A = addcats(A,'xsmall','Before','small'); categories(A)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
カテゴリ {'medium','large','xlarge'}
を B
のカテゴリ 'small'
の後に追加します。
B = addcats(B,{'medium','large','xlarge'},'After','small'); categories(B)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
これで、A
および B
のカテゴリが、順序を含めて同じになりました。
A
と B
を垂直方向に連結します。
C = [A;B]
C = 15x1 categorical
medium
xlarge
small
small
medium
large
medium
large
medium
small
small
xsmall
xsmall
small
small
B
の値が A
の値に追加されます。
C
のカテゴリを一覧表示します。
categories(C)
ans = 5x1 cell
{'xsmall'}
{'small' }
{'medium'}
{'large' }
{'xlarge'}
C
は、xsmall < small < medium < large < xlarge
である 5 つのカテゴリを含む 16 行 1 列の順序 categorical 配列です。
参考
categorical
| categories
| summary
| isprotected
| isordinal
| addcats
関連する例
- categorical 配列の作成
- table 変数内のテキストの categorical への変換
- categorical 配列によるデータへのアクセス
- categorical 配列の結合
- 乗算を使用した categorical 配列の結合