Примечание
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
.
nominal
| ordinal
| droplevels