Выбор данных на основе его значений часто полезен. Этот тип выбора данных может включить создание логического вектора на основе значений в одной переменной и затем использования что логический вектор, чтобы выбрать подмножество значений в других переменных. Можно создать логический вектор для выбора данных путем нахождения значений в числовом массиве, которые находятся в пределах определенной области значений. Кроме того, можно создать логический вектор путем нахождения определенных дискретных значений. При использовании категориальных массивов вы можете легко:
Выберите элементы из конкретных категорий. Для категориальных массивов используйте логические операторы ==
или ~=
, чтобы выбрать данные, которые находятся в, или не в, конкретная категория. Чтобы выбрать данные в конкретной группе категорий, используйте функцию ismember
.
Для порядковых категориальных массивов используйте неравенства >
, >=
, <
или <=
, чтобы найти данные в категориях выше или ниже конкретной категории.
Удалите данные, которые находятся в конкретной категории. Используйте логические операторы, чтобы включать или исключить данные из конкретных категорий.
Найдите элементы, которые не находятся в заданной категории. Категориальные массивы указывают, какие элементы не принадлежат заданной категории <undefined>
. Используйте функцию isundefined
, чтобы найти наблюдения без заданного значения.
Этот пример показывает, как индексировать и искать категориальные массивы использования. Можно получить доступ к данным с помощью категориальных массивов, сохраненных в рамках таблицы подобным образом.
Загрузка демонстрационных данных
Загрузите выборочные данные, собранные от 100 пациентов.
load patients
whos
Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 12212 cell Height 100x1 800 double LastName 100x1 12416 cell Location 100x1 15008 cell SelfAssessedHealthStatus 100x1 12340 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 массив ячеек из символьных векторов.
Выберите Elements в конкретной категории, чтобы построить
Используйте функцию 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 array
{'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 array
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