カテゴリ レベルの追加と削除
この例では、ノミナル配列または順序配列に対してレベルを追加および削除する方法を示します。
メモ
nominal
配列データ型および ordinal
配列データ型は推奨されません。順序付きおよび順序付けのない離散非数値データを表すには、代わりにcategorical 配列データ型を使用します。
標本データの読み込み
load('examgrades')
配列 grades
には、120 名の生徒の標本で 5 回のテストにおける得点 (0 ~ 100 点) が格納されています。
順序配列の作成
以下のカテゴリを使用して、各生徒に対しそれぞれの試験の成績を英字表記で割り当てます。
成績範囲 | 英字の成績区分 |
---|---|
100 | A+ |
90–99 | A |
80–89 | B |
70–79 | C |
60–69 | D |
letter = ordinal(grades,{'D','C','B','A','A+'},[],... [60,70,80,90,100,100]); getlevels(letter)
ans = D C B A A+
成績のカテゴリは 5 つあり、D
、C
、B
、A
、A+
の順に指定されています。
未定義のカテゴリがないことを確認
5 つのどのカテゴリにも該当していない得点があるかどうか確認します。
any(isundefined(letter))
ans = 1 0 1 1 0
生徒ごとに 5 回分のテストの得点が存在します。前のコマンドは 5 回のテストのそれぞれに対する論理値を返します。この論理値は <undefined>
の得点の有無を表します。ここでは 1 番目、3 番目、4 番目のテストの得点が <undefined>
(カテゴリ レベルなし) になっています。
未定義のカテゴリの要素を特定
isundefined
論理条件を使用すると、英字の成績区分が割り当てられていないテストの得点を特定できます。
grades(isundefined(letter))
ans = 55 59 58 59 54 57 56 59 59 50 59 52
50 点台の得点に英字の成績区分が割り当てられていません。
新しいカテゴリの追加
<undefined>
になっているすべての得点を、D-
というラベルが付いた新しいカテゴリに分類します。
letter = addlevels(letter,'D-'); letter(isundefined(letter)) = 'D-'; getlevels(letter)
ans = D C B A A+ D-
letter
の末尾に新しいカテゴリが追加されます。 カテゴリ レベルの並べ替え
カテゴリを並べ替えて、順序を D-
、D
の順にします。
letter = reorderlevels(letter,{'D-','D','C','B','A','A+'}); getlevels(letter)
ans = D- D C B A A+
要素を比較します。
これですべての得点に英字の成績区分が割り当てられました。次に、最初のテストより 2 番目の方が成績区分が高くなっている生徒の人数を数えます。
sum(letter(:,2) > letter(:,1))
ans = 32
最初の 2 回のテストの間に、32 人の生徒の成績区分が高くなっています。
カテゴリの調査
5 回のそれぞれのテストで A+
を獲得した生徒の人数を数えます。
sum(letter=='A+')
ans = 0 0 0 0 0
5 回のどのテストにも A+
の生徒はいません。
カテゴリの削除
順序変数 letter
からカテゴリ A+
を削除します。
letter = droplevels(letter,'A+');
getlevels(letter)
ans = D- D C B A
letter
からカテゴリ A+
がなくなりました。参考
ordinal
| reorderlevels
| droplevels