Выбор данных на основе их значений часто полезен. Этот тип выбора данных может включать в себя создание логического вектора на основе значений в одной переменной, а затем использование этого логического вектора, чтобы выбрать подмножество значений в других переменных. Можно создать логический вектор для выбора данных путем нахождения значений в числовом массиве, которые попадают в определенную область значений. Кроме того, можно создать логический вектор, найдя определенные дискретные значения. При использовании категориальных массивов можно легко:
Выберите элементы из конкретных категорий. Для категориальных массивов используйте логические операторы ==
или ~=
для выбора данных, входящих или не входящих в конкретную категорию. Чтобы выбрать данные в определенной группе категорий, используйте ismember
функция.
Для порядковых категориальных массивов используйте неравенства >
, >=
, <
, или <=
для поиска данных в категориях выше или ниже конкретной категории.
Удалите данные, относящиеся к определенной категории. Используйте логические операторы для включения или исключения данных из определенных категорий.
Найти элементы, не входящие в определенную категорию. Категориальные массивы указывают, какие элементы не относятся к определенной категории по <undefined>
. Используйте isundefined
функция для поиска наблюдений без заданного значения.
В этом примере показано, как индексировать и искать с помощью категориальных массивов. Вы можете получить доступ к данным с помощью категориальных массивов, сохраненных в таблице подобным образом.
Загрузка выборочных данных
Загрузка выборочных данных собранной от 100 пациентов.
load patients
whos
Name 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