Примечание
The nominal
и ordinal
типы данных массива не рекомендованы. Чтобы представлять упорядоченные и неупорядоченные дискретные нечисловые данные, используйте вместо этого тип данных Категориальные Массивы.
Часто полезно индексировать и искать данные по своей категории или группе. Если вы храните категории как метки внутри массива ячеек из векторов символов или char
массив, может быть трудно индексировать и искать категории. При использовании номинальных или порядковых массивов можно легко:
Индексируйте элементы из конкретных категорий. Для как номинальных, так и порядковых массивов можно использовать логические операторы ==
и ~=
для индексации наблюдений, входящих или не входящих в конкретную категорию. Для порядковых массивов, которые имеют закодированный порядок, можно также использовать неравенства, >
, >=
, <
, и <=
, для поиска наблюдений в категориях выше или ниже конкретной категории.
Поиск представителей категории. В дополнение к логическому оператору ==
, можно использовать ismember
для поиска наблюдений в определенной группе.
Найти элементы, не входящие в определенную категорию. Номинальные и порядковые массивы указывают, какие элементы не относятся к определенной категории по <undefined>
. Можно использовать isundefined
для поиска наблюдений, в которых отсутствует категория.
Удалите наблюдения, относящиеся к определенной категории. Можно использовать логические операторы, чтобы включать или исключить наблюдения из определенных категорий. Даже если вы удаляете все наблюдения из категории, уровень категории остается заданным, если вы не удаляете его с помощью droplevels
.
Этот пример показывает несколько распространенных методов индексации и поиска.
Загрузите выборочные данные.
load carsmall;
Преобразуйте char
массив, Origin
, в номинальный массив. Эта переменная содержит страну источника или производства для каждого автомобиля-образца.
Origin = nominal(Origin);
Поиск наблюдений в категории. Определите, есть ли в выборке автомобили, которые были произведены в Канаде.
any(Origin=='Canada')
ans = logical
0
В Канаде нет образцов автомобилей.
Перечислите страны, которые являются уровнями Origin
.
getlevels(Origin)
ans = 1x6 nominal
France Germany Italy Japan Sweden USA
Индексировать элементы, относящиеся к определенной категории. Постройте гистограмму измерений ускорения для автомобилей, изготовленных в США
figure(); histogram(Acceleration(Origin=='USA')) title('Acceleration of Cars Made in the USA')
Удалите наблюдения, относящиеся к определенной категории. Удалить все автомобили, произведенные в Швеции из Origin
.
Origin = Origin(Origin~='Sweden'); any(ismember(Origin,'Sweden'))
ans = logical
0
Автомобили, произведенные в Швеции, удаляются из Origin
, но Sweden
все еще является уровнем Origin
.
getlevels(Origin)
ans = 1x6 nominal
France Germany Italy Japan Sweden USA
Удаление Sweden
от уровней Origin
.
Origin = droplevels(Origin,'Sweden');
getlevels(Origin)
ans = 1x5 nominal
France Germany Italy Japan USA
Проверьте наличие наблюдений, не относящихся к определенной категории. Получите индексы для автомобилей, сделанных во Франции.
ix = find(Origin=='France')
ix = 4×1
11
27
39
61
Есть четыре машины из Франции. Удаление France
от уровней Origin
.
Origin = droplevels(Origin,'France');
Это возвращает предупреждение, указывающее, что вы отбрасываете уровень категории, в котором есть элементы. Эти наблюдения больше не находятся в определенной категории, обозначенной undefined
.
Origin(ix)
ans = 4x1 nominal
<undefined>
<undefined>
<undefined>
<undefined>
Можно использовать isundefined
для поиска наблюдений с неопределенной категорией.
find(isundefined(Origin))
ans = 4×1
11
27
39
61
Эти индексы соответствуют наблюдениям, которые были в категории France
, до того, как эта категория была удалена из Origin
.
droplevels
| nominal
| ordinal