exponenta event banner

Доступ к данным с помощью категориальных массивов

Выбор данных по категориям

Часто полезно выбирать данные на основе их значений. Этот тип выбора данных может включать в себя создание логического вектора на основе значений в одной переменной, а затем использование этого логического вектора для выбора подмножества значений в других переменных. Можно создать логический вектор для выбора данных, найдя значения в числовом массиве, попадающие в определенный диапазон. Кроме того, можно создать логический вектор, найдя определенные дискретные значения. При использовании категориальных массивов можно легко:

  • Выберите элементы из определенных категорий. Для категориальных массивов используйте логические операторы == или ~= для выбора данных, входящих или не входящих в определенную категорию. Для выбора данных в определенной группе категорий используйте 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')

Figure contains an axes. The axes with title Age of Female Patients contains an object of type histogram.

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 имеет место для значений, которые планируется сохранить в массиве позже.

См. также

| | | | | |

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

Подробнее