exponenta event banner

категоричный

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

Описание

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

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 в категориальный массив. 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 или duration, которые слишком близки друг к другу, то categorical функция усекает их до повторяющихся значений. Например, categorical([1 1.00001]) усекает второй элемент входного массива. Чтобы создать категории из числовых данных, используйте discretize функция.

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

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

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

.
Представлен в R2013b