Main Content

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.

Create a categorical array. This array has many different categories that can stand for "yes" and "no".

C = categorical(["Y" "Yes" "Yeah" "N" "No" "Nope"])
C = 1x6 categorical
     Y      Yes      Yeah      N      No      Nope 

categories(C)
ans = 6x1 cell
    {'N'   }
    {'No'  }
    {'Nope'}
    {'Y'   }
    {'Yeah'}
    {'Yes' }

You can match multiple category names by using a pattern. For example, to specify category names that start with a Y, you can use a wildcard pattern. To create a wildcard pattern, use the wildcardPattern function.

Merge all categories whose names start with Y into one category named yes. Then merge all the categories whose names start with N into one category named no. As a result, values that have the same meaning are all in the same category. Now, C has only two categories.

C = mergecats(C,"Y" + wildcardPattern,"yes");
C = mergecats(C,"N" + wildcardPattern,"no")
C = 1x6 categorical
     yes      yes      yes      no      no      no 

categories(C)
ans = 2x1 cell
    {'no' }
    {'yes'}

Input Arguments

collapse all

Input array, specified as a categorical array.

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

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

Extended Capabilities

Version History

Introduced in R2013b