Add and Drop Category Levels

This example shows how to add and drop levels from a nominal or ordinal array.

Note

The nominal and ordinal array data types are not recommended. To represent ordered and unordered discrete, nonnumeric data, use the Categorical Arrays data type instead.

Load sample data.

load('examgrades')

The array grades contains exam scores from 0 to 100 on five exams for a sample of 120 students.

Create an ordinal array.

Assign letter grades to each student for each test using these categories.

Grade RangeLetter Grade
100A+
90–99A
80–89B
70–79C
60–69D

letter = ordinal(grades,{'D','C','B','A','A+'},[],...
                 [60,70,80,90,100,100]);
getlevels(letter)
ans = 

     D      C      B      A      A+ 

There are five grade categories, in the specified order D < C < B < A < A+.

Check for undefined categories.

Check whether or not there are any exam scores that do not fall into the five letter categories.

any(isundefined(letter))
ans =

     1     0     1     1     0

Recall that there are five exam scores for each student. The previous command returns a logical value for each of the five exams, indicating whether there are any scores that are <undefined>. There are scores for the first, third, and fourth exams that are <undefined>, that is, missing a category level.

Identify elements in undefined categories.

You can find the exam scores that do not have a letter grade using the isundefined logical condition.

grades(isundefined(letter))
ans =

    55
    59
    58
    59
    54
    57
    56
    59
    59
    50
    59
    52

The exam scores that are in the 50s do not have a letter grade.

Add a new category.

Put all scores that are <undefined> into a new category labeled D-.

letter(isundefined(letter)) = 'D-';
getlevels(letter)
Warning: Categorical level 'D-' being added. 
> In categorical.subsasgn at 55

ans = 

     D      C      B      A      A+      D- 
The ordinal variable, letter, has a new category added to the end.

Reorder category levels.

Reorder the categories so that D- < D.

letter = reorderlevels(letter,{'D-','D','C','B','A','A+'});
getlevels(letter)
ans = 

     D-      D      C      B      A      A+ 

Compare elements.

Now that all exam scores have a letter grade, count how many students received a higher letter grade on the second test than on the first test.

sum(letter(:,2) > letter(:,1))
ans =

    32

Thirty-two students improved their letter grade between the first two exams.

Explore categories.

Count the number of A+ scores in each of the five exams.

sum(letter=='A+')
ans =

     0     0     0     0     0

There are no A+ scores on any of the five exams.

Drop a category.

Drop the category A+ from the ordinal variable, letter.

letter = droplevels(letter,'A+');
getlevels(letter)
ans = 

     D-      D      C      B      A 
Category A+ is no longer in the ordinal variable, letter.

See Also

| |

Related Examples

More About