Main Content

mergecats

Merge categories in categorical array

Description

B = mergecats(A,oldcats) merges two or more categories of a categorical array into one category. By default, mergecats merges all the categories listed in oldcats into a new category with the same name as oldcats(1). If an element of A belongs to a category listed in oldcats, then the corresponding element of B belongs to oldcats(1).

example

B = mergecats(A,oldcats,newcat) merges all the categories listed in oldcats into a single new category that has the name specified by newcat.

example

Examples

collapse all

Create a categorical array that has categories for various colors.

A = categorical(["pink" "blue" "pink" "red" "blue" "red"])
A = 1x6 categorical
     pink      blue      pink      red      blue      red 

Display the categories of A. The three categories are in alphabetical order.

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

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

oldcats = ["red" "pink"];
B = mergecats(A,oldcats)
B = 1x6 categorical
     red      blue      red      red      blue      red 

Display the categories of B. The new array has fewer categories.

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

Create a categorical array that has categories for various items of clothing.

A = categorical(["shirt" "pants" "shoes" "shirt" "dress" "belt"])
A = 1x6 categorical
     shirt      pants      shoes      shirt      dress      belt 

Display the categories of A. If you do not specify an order, then the categories are in alphabetical order.

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

Merge the categories belt and shoes into a new category called other. The value other replaces all instances of belt and shoes.

B = mergecats(A,["belt" "shoes"],"other")
B = 1x6 categorical
     shirt      pants      other      shirt      dress      other 

Display the categories of B. The new array has four categories and the order is no longer alphabetical. other appears in place of belt because it is the first category that it replaces.

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

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. The categories have the mathematical ordering poor < fair < good.

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

Merge all fair or poor values into a new category called bad. Because A is ordinal, the categories to be merged must be consecutive. If they are not consecutive, then mergecats cannot create a new set of categories that have a mathematical ordering.

B = mergecats(A,["fair" "poor"],"bad")
B = 1x5 categorical
     bad      bad      good      bad      bad 

Display the categories of B. The new array has two categories with the mathematical ordering: bad < good.

categories(B)
ans = 2x1 cell
    {'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 oldcats must specify a subset of categories that are consecutive. If they are not consecutive, then mergecats cannot create a new set of categories that has a mathematical ordering.

  • If A is nonordinal, then oldcats can specify any subset of categories.

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

Extended Capabilities

Version History

Introduced in R2013b