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

Примечание

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

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.

См. также

| |

Похожие примеры

Подробнее о