Доступ к данным Используя Категориальные массивы

Выбор Data By Category

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

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

Смотрите также

| | | | | |

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

Больше о