categorical

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

Описание

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

Создание

Описание

пример

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 также может быть массив объектов со следующими методами классов:

  • unique

  • eq

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

Порядковый индикатор переменной, заданный как разделенная разделенными запятой парами, состоящая из '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
     S1 
     S2 
     S1 
     S3 
     S2 

Отображение категорий. Три метки пикетов являются категориями.

categories(Stations)
ans = 3x1 cell
    {'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
     republican      democrat   
     democrat        democrat   
     democrat        republican 

Отображение категорий B.

categories(B)
ans = 3x1 cell
    {'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
     red        blue      green 
     green      red       blue  
     blue       red       green 

Отображение категорий B.

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

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

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

TF = (B == 'red');
B(TF)
ans = 3x1 categorical
     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
     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
    "plane"    "jet"    "plane"    "helicopter"    <missing>    "jet"

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

C = categorical(str)
C = 1x6 categorical
     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 

Совет

  • Список функций, которые принимают или возвращают категориальные массивы, см. в разделе Категориальные массивы.

  • Если массив входа имеет числовые, datetime или значения длительности, которые слишком близки друг к другу, то categorical функция обрезает их, чтобы повторить значения. Для примера, categorical([1 1.00001]) обрезает второй элемент массива входа. Чтобы создать категории из числовых данных, используйте discretize функция.

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

Вы также можете сгруппировать числовые данные в категории, используя discretize.

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

.
Введенный в R2013b