`categorical`

is a data type to store data
with values from a finite set of discrete categories, which can have
a natural order. You can specify and rearrange the order of categories
in all categorical arrays. However, you only can treat *ordinal* categorical
arrays as having a mathematical ordering to their categories. Use
an ordinal categorical array if you want to use the functions `min`

, `max`

,
or relational operations, such as greater than and less than.

The discrete set of pet categories `{'dog' 'cat' 'bird'}`

has
no meaningful mathematical ordering. You are free to use any category
order and the meaning of the associated data does not change. For
example, `pets = categorical({'bird','cat','dog','dog','cat'})`

creates
a categorical array and the categories are listed in alphabetical
order, `{'bird' 'cat' 'dog'}`

. You can choose to
specify or change the order of the categories to ```
{'dog' 'cat'
'bird'}
```

and the meaning of the data does not change.

*ordinal* categorical arrays contain categories
that have a meaningful mathematical ordering. For example, the discrete
set of size categories `{'small', 'medium', 'large'}`

has
the mathematical ordering `small < medium < large`

.
The first category listed is the smallest and the last category is
the largest. The order of the categories in an ordinal categorical
array affects the result from relational comparisons of ordinal categorical
arrays.

This example shows how to create an ordinal categorical array using the `categorical`

function with the `'Ordinal',true`

name-value pair argument.

**Ordinal Categorical Array from a Cell Array of Character Vectors**

Create an ordinal categorical array, `sizes`

, from a cell array of character vectors, `A`

. Use `valueset`

, specified as a vector of unique values, to define the categories for `sizes`

.

A = {'medium' 'large';'small' 'medium'; 'large' 'small'}; valueset = {'small', 'medium', 'large'}; sizes = categorical(A,valueset,'Ordinal',true)

sizes = medium large small medium large small

`sizes`

is 3-by-2 ordinal categorical array with three categories such that `small < medium < large`

. The order of the values in `valueset`

becomes the order of the categories of `sizes`

.

**Ordinal Categorical Array from Integers**

Create an equivalent categorical array from an array of integers. Use the values `1`

, `2`

, and `3`

to define the categories `small`

, `medium`

, and `large`

, respectively.

A2 = [2 3; 1 2; 3 1]; valueset = 1:3; catnames = {'small','medium','large'}; sizes2 = categorical(A2,valueset,catnames,'Ordinal',true)

sizes2 = medium large small medium large small

Compare `sizes`

and `sizes2`

isequal(sizes,sizes2)

ans = 1

`sizes`

and `sizes2`

are equivalent categorical arrays with the same ordering of categories.

**Convert a Categorical Array from Nonordinal to Ordinal**

Create a nonordinal categorical array from the cell array of character vectors, `A`

.

sizes3 = categorical(A)

sizes3 = medium large small medium large small

Determine if the categorical array is ordinal.

isordinal(sizes3)

ans = 0

`sizes3`

is a nonordinal categorical array with three categories, `{'large','medium','small'}`

. The categories of `sizes3`

are the sorted unique values from `A`

. You must use the input argument, `valueset`

, to specify a different category order.

Convert `sizes3`

to an ordinal categorical array, such that `small < medium < large`

.

sizes3 = categorical(sizes3,{'small','medium','large'},'Ordinal',true);

`sizes3`

is now a 3-by-2 ordinal categorical array equivalent to `sizes`

and `sizes2`

.

In order to combine or compare two categorical arrays, the sets of categories for both input arrays must be identical, including their order. Furthermore, ordinal categorical arrays are always protected. Therefore, when you assign values to an ordinal categorical array, the values must belong to one of the existing categories. For more information see Work with Protected Categorical Arrays.

`categorical`

| `categories`

| `isequal`

| `isordinal`

- Create Categorical Arrays
- Convert Table Variables Containing Character Vectors to Categorical
- Compare Categorical Array Elements
- Access Data Using Categorical Arrays

Was this topic helpful?