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 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 

Советы

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

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

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

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

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

Введенный в R2013b