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

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

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

| | | | | |

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

Больше о