Создание категориальных массивов

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

По умолчанию категориальные массивы содержат категории, которые не имеют никакого математического упорядоченного расположения. Например, дискретный набор любимых категорий, {'dog' 'cat' 'bird'} не имеет никакого значимого математического упорядоченного расположения, таким образом, MATLAB® использует алфавитное упорядоченное расположение {'bird' 'cat' 'dog'}. Порядковые категориальные массивы содержат категории, которые имеют значимое математическое упорядоченное расположение. Например, дискретный набор категорий размера {'small', 'medium', 'large'} имеет математическое упорядоченное расположение small < medium < large.

Когда вы создаете категориальные массивы из массивов ячеек из символьных векторов или строковых массивов, продвижение и конечные пробелы удалены. Например, если вы задаете текст {' кошка' 'собака'} как категории, затем когда вы преобразовываете их в категории, они становятся {'кошкой' 'собака'}.

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

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

Создайте массив ячеек из символьных векторов 1 на 11, содержащий имена состояния из Новой Англии.

state = {'MA','ME','CT','VT','ME','NH','VT','MA','NH','CT','RI'};

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

state = categorical(state)
state = 1x11 categorical array
  Columns 1 through 9

     MA      ME      CT      VT      ME      NH      VT      MA      NH 

  Columns 10 through 11

     CT      RI 

class(state)
ans = 
'categorical'

Перечислите дискретные категории в переменной state.

categories(state)
ans = 6x1 cell array
    {'CT'}
    {'MA'}
    {'ME'}
    {'NH'}
    {'RI'}
    {'VT'}

Категории перечислены в алфавитном порядке.

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

Создайте 1 8 массив ячеек из символьных векторов, содержащий размеры восьми объектов.

AllSizes = {'medium','large','small','small','medium',...
            'large','medium','small'};

Массив ячеек, AllSizes, имеет три отличных значения: 'large', 'medium' и 'small'. С массивом ячеек из символьных векторов нет никакого удобного способа указать на тот small < medium < large.

Преобразуйте массив ячеек, AllSizes, к порядковому категориальному массиву. Используйте valueset, чтобы задать значения small, medium и large, которые задают категории. Для порядкового категориального массива первая заданная категория является самой маленькой, и последняя категория является самой большой.

valueset = {'small','medium','large'};
sizeOrd = categorical(AllSizes,valueset,'Ordinal',true)
sizeOrd = 1x8 categorical array
  Columns 1 through 6

     medium      large      small      small      medium      large 

  Columns 7 through 8

     medium      small 

class(sizeOrd)
ans = 
'categorical'

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

Перечислите дискретные категории в категориальной переменной, sizeOrd.

categories(sizeOrd)
ans = 3x1 cell array
    {'small' }
    {'medium'}
    {'large' }

Категории перечислены в заданном порядке совпадать с математическим упорядоченным расположением small < medium < large.

Создание порядкового категориального массива числовыми данными раскладывания

Создайте вектор 100 случайных чисел между нулем и 50.

x = rand(100,1)*50;

Используйте функцию discretize, чтобы создать категориальный массив раскладыванием значения x. Поместите все значения между нулем и 15 в первом интервале, всех значениях между 15 и 35 во втором интервале и всех значениях между 35 и 50 в третьем интервале. Каждый интервал включает левую конечную точку, но не включает правильную конечную точку.

catnames = {'small','medium','large'};
binnedData = discretize(x,[0 15 35 50],'categorical',catnames);

binnedData является 100 1 порядковым категориальным массивом с тремя категориями, такими что small < medium < large.

Используйте функцию summary, чтобы распечатать число элементов в каждой категории.

summary(binnedData)
     small       30 
     medium      35 
     large       35 

Создание категориального массива из массива строк

Начиная в R2016b, можно создать строковые массивы с функцией string и преобразовать их в категориальный массив.

Создайте массив строк, который содержит имена планет.

str = string({'Earth','Jupiter','Neptune','Jupiter','Mars','Earth'})
str = 1x6 string array
    "Earth"    "Jupiter"    "Neptune"    "Jupiter"    "Mars"    "Earth"

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

planets = categorical(str)
planets = 1x6 categorical array
     Earth      Jupiter      Neptune      Jupiter      Mars      Earth 

Добавьте недостающие элементы в str и преобразуйте его в категориальный массив. Где str имеет отсутствующие значения, planets имеет неопределенные значения.

str(8) = 'Mars'
str = 1x8 string array
  Columns 1 through 6

    "Earth"    "Jupiter"    "Neptune"    "Jupiter"    "Mars"    "Earth"

  Columns 7 through 8

    <missing>    "Mars"

planets = categorical(str)
planets = 1x8 categorical array
  Columns 1 through 6

     Earth      Jupiter      Neptune      Jupiter      Mars      Earth 

  Columns 7 through 8

     <undefined>      Mars 

Смотрите также

| | |

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте