exponenta event banner

Индексирование и поиск с использованием номинальных и порядковых массивов

Примечание

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')

Figure contains an axes. The axes with title Acceleration of Cars Made in the USA contains an object of type histogram.

Удаление замечаний, относящихся к определенной категории. Исключить все автомобили, изготовленные в Швеции, из 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.

См. также

| |

Связанные примеры

Подробнее