mergecats

Merge categories in categorical array

Description

example

B = mergecats(A,oldcats) merges two or more categories in A into the first category, oldcats(1). Any values in A from oldcats become oldcats(1) in B.

example

B = mergecats(A,oldcats,newcat) merges oldcats into a single new category, newcat. Any values in A from oldcats become newcat in B.

Examples

collapse all

Create a categorical array containing various colors.

A = categorical({'red';'blue';'pink';'red';'blue';'red'})
A = 6x1 categorical
     red 
     blue 
     pink 
     red 
     blue 
     red 

A is a 6-by-1 categorical array.

Display the categories of A.

categories(A)
ans = 3x1 cell
    {'blue'}
    {'pink'}
    {'red' }

The three categories are in alphabetical order.

Merge the categories red and pink into the category red. Specify red first in oldcats to use it as the merged category.

oldcats = {'red','pink'};
B = mergecats(A,oldcats)
B = 6x1 categorical
     red 
     blue 
     red 
     red 
     blue 
     red 

mergecats replaces the value pink from A(3) with red.

Display the categories of B.

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

B has two categories instead of three.

Create a categorical array containing various items.

A = categorical({'shirt' 'pants'; 'shoes' 'shirt'; 'dress' 'belt'})
A = 3x2 categorical
     shirt      pants 
     shoes      shirt 
     dress      belt  

Display the categories of A.

categories(A)
ans = 5x1 cell
    {'belt' }
    {'dress'}
    {'pants'}
    {'shirt'}
    {'shoes'}

The five categories are in alphabetical order.

Merge the categories belt and shoes into a new category called other.

B = mergecats(A,{'belt' 'shoes'},'other')
B = 3x2 categorical
     shirt      pants 
     other      shirt 
     dress      other 

The value other replaces all instances of belt and shoes.

Display the categories of B.

categories(B)
ans = 4x1 cell
    {'other'}
    {'dress'}
    {'pants'}
    {'shirt'}

B has four categories and the order is no longer alphabetical. other appears in place of belt.

Create an ordinal categorical array.

A = categorical([1 2 3 2 1],1:3,{'poor','fair','good'},'Ordinal',true)
A = 1x5 categorical
     poor      fair      good      fair      poor 

Display the categories of A.

categories(A)
ans = 3x1 cell
    {'poor'}
    {'fair'}
    {'good'}

Since A is ordinal, the categories have the mathematical ordering poor < fair < good.

Consider all fair or poor values to be bad. Since A is ordinal, the categories to merge must be consecutive.

B = mergecats(A,{'fair' 'poor'},'bad')
B = 1x5 categorical
     bad      bad      good      bad      bad 

The value bad replaces all instances of fair and poor.

Display the categories of B.

categories(B)
ans = 2x1 cell
    {'bad' }
    {'good'}

B has two categories with the mathematical ordering: bad < good.

Input Arguments

collapse all

Categorical array, specified as a vector, matrix, or multidimensional array.

Categories to merge, specified as a cell array of character vectors or a string array. If A is ordinal, then the categories to merge must be consecutive.

New category, specified as a character vector or a string scalar.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Introduced in R2013b