Main Content

reordercats

categorical 数组中的类别重新排序

说明

示例

B = reordercats(A)categorical 数组 A 中的类别重新排序,以使其按字母数字顺序排列。

函数(例如 summaryhistogram)使用这些类别的顺序。如果 categorical 数组是有序的,则这些类别的顺序定义其数学顺序。指定的第一个类别是最小的类别,最后一个类别是最大的类别。

示例

B = reordercats(A,neworder)neworder 指定的顺序放置这些类别。

示例

全部折叠

创建两个分类数组 XY

X = categorical({'frog';'cat';'cat';'ant';'frog'})
X = 5x1 categorical
     frog 
     cat 
     cat 
     ant 
     frog 

Y = categorical({'deer';'bear';'eagle';'deer'})
Y = 4x1 categorical
     deer 
     bear 
     eagle 
     deer 

X 是一个 5×1 分类数组。X 的类别是该数组中经过排序的唯一值:{'ant';'cat';'frog'}

Y 是一个 4×1 分类数组。Y 的类别是该数组中经过排序的唯一值:{'bear';'deer';'eagle'}

XY 串联为一个分类数组 A

A = [X;Y]
A = 9x1 categorical
     frog 
     cat 
     cat 
     ant 
     frog 
     deer 
     bear 
     eagle 
     deer 

vertcatY 中的值追加到 X 中的值后面。

列出分类数组 A 的类别。

acats = categories(A)
acats = 6x1 cell
    {'ant'  }
    {'cat'  }
    {'frog' }
    {'bear' }
    {'deer' }
    {'eagle'}

vertcatY 的类别追加到 X 中的类别后面。A 的类别按字母顺序排列。

按字母顺序重新排列 A 的类别。

B = reordercats(A)
B = 9x1 categorical
     frog 
     cat 
     cat 
     ant 
     frog 
     deer 
     bear 
     eagle 
     deer 

输出分类数组 B 与输入分类数组 A 具有顺序相同的元素。

列出分类数组 B 的类别。

bcats = categories(B)
bcats = 6x1 cell
    {'ant'  }
    {'bear' }
    {'cat'  }
    {'deer' }
    {'eagle'}
    {'frog' }

B 的类别按字母顺序排列。

创建一个包含各项目的颜色的分类数组。

A = categorical({'red';'green';'blue';'red';'green';'red';'blue';'blue'})
A = 8x1 categorical
     red 
     green 
     blue 
     red 
     green 
     red 
     blue 
     blue 

A 是一个 8×1 分类数组。

显示 A 的类别。

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

A 的类别按字母顺序排列且没有任何数学含义。

重新排列这些类别以匹配通常使用的色序。

B = reordercats(A,{'red','green','blue'})
B = 8x1 categorical
     red 
     green 
     blue 
     red 
     green 
     red 
     blue 
     blue 

BA 包含相同的值。

显示 B 的类别。

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

B 不是有序的,这些类别的顺序没有任何数学含义。尽管这些类别按色谱顺序显示,但关系运算(例如大于和小于)没有任何含义。

创建一个有序分类数组 A,其中包含交通方式。基于平均旅费对这些类别排序。

A = categorical({'plane';'car'; 'train';'car';'plane';'car'},...
    {'car','train','plane'},'Ordinal',true)
A = 6x1 categorical
     plane 
     car 
     train 
     car 
     plane 
     car 

A 是一个 6×1 有序分类数组。

显示 A 的类别。

categories(A)
ans = 3x1 cell
    {'car'  }
    {'train'}
    {'plane'}

因为 A 是有序的,所以 car < train < plane

对这些类别重新排序以按降序排列火车乘车费用。

B = reordercats(A,{'train','car','plane'})
B = 6x1 categorical
     plane 
     car 
     train 
     car 
     plane 
     car 

BA 包含相同的值。

显示 B 的类别。

categories(B)
ans = 3x1 cell
    {'train'}
    {'car'  }
    {'plane'}

这些类别的数学顺序现在为 train < car < plane。关系运算 minmax 的结果反映新类别顺序。

创建一个分类数组 A,其中包含交通方式。

A = categorical({'plane';'car';'train';'car';'car';'plane';'car'})
A = 7x1 categorical
     plane 
     car 
     train 
     car 
     car 
     plane 
     car 

显示 A 的类别。

categories(A)
ans = 3x1 cell
    {'car'  }
    {'plane'}
    {'train'}

按出现次数最少至最多的顺序对 A 中的类别重新排序。

B = countcats(A);
[C,neworder] = sort(B);
neworder
neworder = 3×1

     3
     2
     1

D = reordercats(A,neworder);
categories(D)
ans = 3x1 cell
    {'train'}
    {'plane'}
    {'car'  }

由于 countcats 统计每个类别的出现次数,因此 neworder 描述如何对 A 的类别而不是元素重新排序。

创建一个 categorical 数组。此数组有许多不同类别可以表示“是”和“否”。

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

按顺序列出这些类别。默认情况下,这些类别的排序顺序是按字母顺序,因为 MATLAB® 将字符存储为 Unicode®。

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

您可以使用pattern匹配多个类别名称。例如,要指定以 Y 开头的类别名称,可以使用通配符模式。要创建通配符模式,请使用 wildcardPattern 函数。

对这些类别重新排序。更改排序顺序,使以 Y 开头的类别出现在以 N 开头的类别之前。

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

按新顺序列出类别。

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

输入参数

全部折叠

输入数组,指定为 categorical 数组。如果 A 是有序 categorical 数组,则重新排列这些类别会更改数学含义。因此,关系运算符(例如大于和小于)可能返回不同结果。

B 的新类别顺序,指定为字符串数组、字符向量元胞数组、数值向量或 pattern 数组。neworder 必须为 categories(A) 的置换。

提示

  • 要将分类数组 B 转换为有序分类数组,请使用 B = categorical(B,'Ordinal',true)。您可以使用 B = categorical(B,valueset,'Ordinal',true) 指定类别顺序,其中 valueset 中的值顺序定义类别顺序。

扩展功能

版本历史记录

在 R2013b 中推出