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 к категориальному массиву. 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