категориальный

Массив, который содержит значения, присвоенные категориям

Описание

categorical является типом данных, который присваивает значения конечному множеству дискретных категорий, такие как High, Med и Low. Эти категории могут иметь математическое упорядоченное расположение, чтобы вы задали, такие как High > Med > Low, но он не требуется. Категориальный массив обеспечивает эффективное устройство хранения данных и удобную манипуляцию нечисловых данных, также поддерживая понятные имена для значений. Общее использование категориальных массивов должно задать группы строк в таблице.

Создание

Синтаксис

B = categorical(A)
B = categorical(A,valueset)
B = categorical(A,valueset,catnames)
B = categorical(A,___,Name,Value)

Описание

пример

B = categorical(A) создает категориальный массив из массива A. Категории B являются отсортированными уникальными значениями от A.

пример

B = categorical(A,valueset) создает одну категорию для каждого значения в valueset. Категории B находятся в том же порядке как значения valueset.

Можно использовать valueset, чтобы включать категории для значений, не существующих в A. С другой стороны, если A содержит какие-либо значения, не существующие в valueset, то соответствующие элементы B не определены.

пример

B = categorical(A,valueset,catnames) называет категории в B путем соответствия со значениями категории в valueset с именами в catnames.

пример

B = categorical(A,___,Name,Value) создает категориальный массив с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value. Можно включать любой из входных параметров в предыдущих синтаксисах.

Например, чтобы указать, что категории имеют математическое упорядоченное расположение, задайте 'Ordinal',true.

Входные параметры

развернуть все

Входной массив, заданный как числовой массив, логический массив, категориальный массив, массив datetime, массив длительности, массив строк или массив ячеек из символьных векторов.

categorical удаляет продвижение и конечные пробелы от входных значений, которые являются строками или векторами символов.

Если A содержит отсутствующие значения, то соответствующий элемент B не определен и отображается как <undefined>. Функция categorical преобразовывает следующие значения в неопределенные категориальные значения:

  • NaN в числовом и массивах длительности

  • Отсутствующая строка (<missing>) или пустая строка ("") в массивах строк

  • Пустой символьный вектор ('') в массивах ячеек из символьных векторов

  • NaT в массивах datetime

  • Неопределенные значения (<undefined>) в категориальных массивах

B не имеет категории для неопределенных значений. Чтобы создать явную категорию для того, чтобы избегать или неопределенных значений, необходимо включать желаемое название категории в catnames и отсутствующее значение как соответствующее значение в valueset.

A также может быть массивом объектов со следующими методами класса:

  • уникальный

  • eq

Категории, заданные как вектор уникальных значений. Тип данных valueset и тип данных A должны быть тем же самым, кроме тех случаев, когда A является массивом строк. В этом случае valueset или может быть массивом строк или массивом ячеек из символьных векторов.

categorical удаляет продвижение и конечные пробелы от элементов valueset, которые являются строками или векторами символов.

Названия категории, заданные как массив ячеек из символьных векторов или массив строк. Если вы не задаете входной параметр catnames, то categorical использует значения в valueset как названия категории.

Чтобы объединить несколько отличных значений в A в единственную категорию в B, включайте двойные названия, соответствующие тем значениям.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Порядковый', верный указывает, что категории имеют математическое упорядоченное расположение

Индикатор порядка сортировки, заданный как пара, разделенная запятой, состоящая из 'Ordinal' и или false (0) или true (1).

false (0)

categorical создает категориальный массив, который не является порядковым, который является поведением по умолчанию.

Категории B не имеют никакого математического упорядоченного расположения. Поэтому можно сравнить только значения в B для равенства.

true (1)

categorical создает порядковый категориальный массив.

Категории B имеют математическое упорядоченное расположение, такое, что первая заданная категория является самой маленькой, и последняя категория является самой большой. Можно сравнить значения в B с помощью операторов отношения, таких как меньше, чем и больше, чем, в дополнение к сравнению значений для равенства. Также можно использовать min и функции max на порядковом категориальном массиве.

Для получения дополнительной информации смотрите Порядковые категориальные массивы.

Индикатор защиты категории, заданный как пара, разделенная запятой, состоящая из 'Protected' и или false (0) или true (1). Категории порядковых категориальных массивов всегда защищаются. Значением по умолчанию является true, когда вы задаете 'Ordinal',true. В противном случае значением является false.

false (0)

Когда вы присваиваете новые значения B, категории обновляют автоматически. Поэтому можно объединить (непорядковые) категориальные массивы, которые имеют различные категории. Категории могут обновить соответственно, чтобы включать категории от обоих массивов.

true (1)

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

Примеры

свернуть все

Создайте категориальный массив, который имеет метки метеостанции. Добавьте его к таблице температурных чтений. Затем используйте категории, чтобы выбрать температурные чтения станцией.

Во-первых, создайте массивы, содержащие температурные чтения, даты и метки станции.

Temps = [58; 72; 56; 90; 76];
Dates = {'2017-04-17';'2017-04-18';'2017-04-30';'2017-05-01';'2017-04-27'};
Stations = {'S1';'S2';'S1';'S3';'S2'};

Преобразуйте Stations в категориальный массив.

Stations = categorical(Stations)
Stations = 5x1 categorical array
     S1 
     S2 
     S1 
     S3 
     S2 

Отобразите категории. Эти три метки станций являются категориями.

categories(Stations)
ans = 3x1 cell array
    {'S1'}
    {'S2'}
    {'S3'}

Составьте таблицу, которая содержит температуры, даты и метки станции.

T = table(Temps,Dates,Stations)
T=5×3 table
    Temps       Dates        Stations
    _____    ____________    ________

     58      '2017-04-17'       S1   
     72      '2017-04-18'       S2   
     56      '2017-04-30'       S1   
     90      '2017-05-01'       S3   
     76      '2017-04-27'       S2   

Отобразите показания, снятые от станции S2. Можно использовать оператор ==, чтобы найти значения Station тем равным S2. Затем используйте логическую индексацию, чтобы выбрать строки таблицы, которые имеют данные от станции S2.

TF = (T.Stations == 'S2');
T(TF,:)
ans=2×3 table
    Temps       Dates        Stations
    _____    ____________    ________

     72      '2017-04-18'       S2   
     76      '2017-04-27'       S2   

Преобразуйте массив ячеек из символьных векторов A в категориальный массив. Задайте список категорий, который включает значения, которые не присутствуют в A.

Создайте массив ячеек из символьных векторов.

A = {'republican' 'democrat'; 'democrat' 'democrat'; 'democrat' 'republican'};

Преобразуйте A в категориальный массив. Добавьте категорию для independent.

valueset = {'democrat' 'republican' 'independent'};
B = categorical(A,valueset)
B = 3x2 categorical array
     republican      democrat   
     democrat        democrat   
     democrat        republican 

Отобразите категории B.

categories(B)
ans = 3x1 cell array
    {'democrat'   }
    {'republican' }
    {'independent'}

Создайте числовой массив.

A = [1 3 2; 2 1 3; 3 1 2]
A = 3×3

     1     3     2
     2     1     3
     3     1     2

Преобразуйте A в категориальный массив B и задайте названия категории.

B = categorical(A,[1 2 3],{'red' 'green' 'blue'})
B = 3x3 categorical array
     red        blue      green 
     green      red       blue  
     blue       red       green 

Отобразите категории B.

categories(B)
ans = 3x1 cell array
    {'red'  }
    {'green'}
    {'blue' }

B не является порядковым категориальным массивом. Поэтому можно сравнить значения в B только с помощью операторов равенства, == и ~=.

Найдите элементы, которые принадлежат категории 'red'. Доступ к тем элементам, использующим логическую индексацию.

TF = (B == 'red');
B(TF)
ans = 3x1 categorical array
     red 
     red 
     red 

Создайте 5 2 числовой массив.

A = [3 2;3 3;3 2;2 1;3 2]
A = 5×2

     3     2
     3     3
     3     2
     2     1
     3     2

Преобразуйте A в порядковый категориальный массив, где 1, 2 и 3 представляют категории child, adult и senior соответственно.

valueset = [1:3];
catnames = {'child' 'adult' 'senior'};

B = categorical(A,valueset,catnames,'Ordinal',true)
B = 5x2 categorical array
     senior      adult  
     senior      senior 
     senior      adult  
     adult       child  
     senior      adult  

Поскольку B является порядковым, категории B имеют математическое упорядоченное расположение, child < adult < senior.

Начиная в R2017a, можно создать массивы строк с помощью двойных кавычек. Кроме того, массив строк может иметь отсутствующие значения, отображенные как <missing>, без кавычек.

str = ["plane","jet","plane","helicopter",missing,"jet"]
str = 1x6 string array
    "plane"    "jet"    "plane"    "helicopter"    <missing>    "jet"

Преобразуйте массив строк str в категориальный массив. Функция categorical преобразовывает отсутствующие строки в неопределенные категориальные значения, отображенные как <undefined>.

C = categorical(str)
C = 1x6 categorical array
     plane      jet      plane      helicopter      <undefined>      jet 

Используйте функцию discretize (вместо categorical) к интервалу 100 случайных чисел в три категории.

x = rand(100,1);
y = discretize(x,[0 .25 .75 1],'categorical',{'small','medium','large'});
summary(y)
     small       22 
     medium      46 
     large       32 

Советы

Альтернативы

Также можно сгруппировать числовые данные в категории с помощью discretize.

Расширенные возможности

Введенный в R2013b

Была ли эта тема полезной?