Выбор данных на основе их значений часто полезен. Этот тип выбора данных может включать в себя создание логического вектора на основе значений в одной переменной, а затем использование этого логического вектора, чтобы выбрать подмножество значений в других переменных. Можно создать логический вектор для выбора данных путем нахождения значений в числовом массиве, которые попадают в определенную область значений. Кроме того, можно создать логический вектор, найдя определенные дискретные значения. При использовании категориальных массивов можно легко:
Выберите элементы из конкретных категорий. Для категориальных массивов используйте логические операторы == или ~= для выбора данных, входящих или не входящих в конкретную категорию. Чтобы выбрать данные в определенной группе категорий, используйте ismember функция.
Для порядковых категориальных массивов используйте неравенства >, >=, <, или <= для поиска данных в категориях выше или ниже конкретной категории.
Удалите данные, относящиеся к определенной категории. Используйте логические операторы для включения или исключения данных из определенных категорий.
Найти элементы, не входящие в определенную категорию. Категориальные массивы указывают, какие элементы не относятся к определенной категории по <undefined>. Используйте isundefined функция для поиска наблюдений без заданного значения.
В этом примере показано, как индексировать и искать с помощью категориальных массивов. Вы можете получить доступ к данным с помощью категориальных массивов, сохраненных в таблице подобным образом.
Загрузка выборочных данных
Загрузка выборочных данных собранной от 100 пациентов.
load patients
whosName Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 11412 cell Height 100x1 800 double LastName 100x1 11616 cell Location 100x1 14208 cell SelfAssessedHealthStatus 100x1 11540 cell Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double
Создание категорийных массивов из Массивов ячеек из символьных векторов
Gender и Location содержат данные, которые относятся к категориям. Каждый массив ячеек содержит векторы символов, взятые из небольшого набора уникальных значений (что указывает на два пола и три местоположения соответственно). Преобразование Gender и Location в категориальные массивы.
Gender = categorical(Gender); Location = categorical(Location);
Поиск представителей одной категории
Для категориальных массивов можно использовать логические операторы == и ~= для поиска данных, входящих или не входящих в конкретную категорию.
Определите, есть ли пациенты, наблюдаемые в месте, 'Rampart General Hospital'.
any(Location=='Rampart General Hospital')ans = logical
0
В больнице общего профиля Рампарт пациентов не наблюдается.
Поиск представителей группы категорий
Можно использовать ismember для поиска данных в определенной группе категорий. Создайте логический вектор для пациентов, наблюдаемых в County General Hospital или VA Hospital.
VA_CountyGenIndex = ... ismember(Location,{'County General Hospital','VA Hospital'});
VA_CountyGenIndex является логическим массивом 100 на 1, содержащим логические true (1) для каждого элемента в категориальном массиве Location является представителем категории County General Hospital или VA Hospital. Выход, VA_CountyGenIndex содержит 76 ненулевых элементов.
Используйте логический вектор, VA_CountyGenIndex для выбора LastName пациентов, наблюдаемых в любом из County General Hospital или VA Hospital.
VA_CountyGenPatients = LastName(VA_CountyGenIndex);
VA_CountyGenPatients является массивом ячеек 76 на 1 из векторов символов.
Выберите элементы конкретной категории для построения графика
Используйте summary функция для печати сводных данных, содержащей имена категорий и количество элементов в каждой категории.
summary(Location)
County General Hospital 39
St. Mary's Medical Center 24
VA Hospital 37
Location представляет собой категориальный массив 100 на 1 с тремя категориями. County General Hospital происходит в 39 элементах, St. Mary s Medical Center в 24 элементах и VA Hospital в 37 элементах.
Используйте summary функция для печати сводных данных Gender.
summary(Gender)
Female 53
Male 47
Gender представляет собой категориальный массив 100 на 1 с двумя категориями. Female происходит в 53 элементах и Male происходит в 47 элементах.
Используйте логический оператор == для доступа к возрасту только женщин-пациентов. Затем постройте гистограмму этих данных.
figure() histogram(Age(Gender=='Female')) title('Age of Female Patients')

histogram(Age(Gender=='Female')) строит графики возрастных данных для 53 пациентов женского пола.
Удаление данных из конкретной категории
Можно использовать логические операторы для включения или исключения данных из определенных категорий. Удалите всех пациентов, наблюдаемых в VA Hospital из переменных рабочей области, Age и Location.
Age = Age(Location~='VA Hospital'); Location = Location(Location~='VA Hospital');
Теперь, Age является числовым массивом 63 на 1 и Location представляет собой категориальный массив 63 на 1.
Перечислите категории Location, а также количество элементов в каждой категории.
summary(Location)
County General Hospital 39
St. Mary's Medical Center 24
VA Hospital 0
Пациенты, наблюдаемые в VA Hospital удаляются из Location, но VA Hospital все еще является категорией.
Используйте removecats функция для удаления VA Hospital из категорий Location.
Location = removecats(Location,'VA Hospital');Проверьте, что категория, VA Hospital, был удален.
categories(Location)
ans = 2x1 cell
{'County General Hospital' }
{'St. Mary's Medical Center'}
Location представляет собой категориальный массив 63 на 1, который имеет две категории.
Удаление элемента
Можно удалить элементы путем индексации. Для примера можно удалить первый элемент Location путем выбора остальных элементов с Location(2:end). Однако более легким способом удаления элементов является использование [].
Location(1) = []; summary(Location)
County General Hospital 38
St. Mary's Medical Center 24
Location представляет собой категориальный массив 62 на 1, который имеет две категории. Удаление первого элемента не влияет на другие элементы из той же категории и не удаляет саму категорию.
Проверяйте на неопределенные данные
Удалите категорию County General Hospital от Location.
Location = removecats(Location,'County General Hospital');Отобразите первые восемь элементов категориального массива, Location.
Location(1:8)
ans = 8x1 categorical
St. Mary's Medical Center
<undefined>
St. Mary's Medical Center
St. Mary's Medical Center
<undefined>
<undefined>
St. Mary's Medical Center
St. Mary's Medical Center
После удаления категории County General Hospitalэлементы, которые ранее принадлежали к этой категории, больше не относятся к какой-либо категории, определенной для Location. Категориальные массивы обозначают эти элементы как undefined.
Используйте функцию isundefined найти наблюдения, которые не относятся ни к одной категории.
undefinedIndex = isundefined(Location);
undefinedIndex - категориальный массив 62 на 1, содержащий логические true (1) для всех неопределенных элементов в Location.
Задание неопределенных элементов
Используйте summary функция для печати количества неопределенных элементов в Location.
summary(Location)
St. Mary's Medical Center 24
<undefined> 38
Первый элемент Location относится к категории, St. Mary's Medical Center. Установите первый элемент, который будет undefined чтобы он больше не относился ни к какой категории.
Location(1) = '<undefined>';
summary(Location) St. Mary's Medical Center 23
<undefined> 39
Можно сделать выбранные элементы undefined без удаления категории или изменения категорий других элементов. Установите элементы, которые будут undefined для указания элементов со значениями, которые неизвестны.
Предварительное выделение категориальных массивов с неопределенными элементами
Можно использовать неопределенные элементы для предварительного выделения размера категориального массива для повышения эффективности. Создайте категориальный массив, который имеет элементы только с известными местоположениями.
definedIndex = ~isundefined(Location); newLocation = Location(definedIndex); summary(newLocation)
St. Mary's Medical Center 23
Расширьте размер newLocation так что это категориальный массив 200 на 1. Установите последний новый элемент, который будет undefined. Все другие новые элементы также должны быть undefined. 23 оригинальных элемента сохраняют значения.
newLocation(200) = '<undefined>';
summary(newLocation) St. Mary's Medical Center 23
<undefined> 177
newLocation имеет место для значений, которые вы планируете хранить в массиве позже.
any | categorical | categories | histogram | isundefined | removecats | summary