主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

reordercats

对分类数组中的类别重新排序

说明

B = reordercats(A) 对分类数组中的类别重新排序。默认情况下,reordercats 使用字母数字顺序。

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

示例

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

示例

示例

全部折叠

创建一个分类数组时,类别始终有一定的顺序。但是,如果您稍后添加类别,则该组新类别的顺序可能会出现问题。要按字母数字顺序排列类别,请使用 reordercats 函数。

例如,串联两个分类数组。然后对结果的类别重新排序。

首先创建数组。

X = categorical(["Frog" "Cat" "Cat" "Ant" "Frog"])
X = 1×5 categorical
     Frog      Cat      Cat      Ant      Frog 

Y = categorical(["Deer" "Bear" "Eagle" "Deer"])
Y = 1×4 categorical
     Deer      Bear      Eagle      Deer 

每个数组的类别按字母数字顺序排列。

Xcats = categories(X)
Xcats = 3×1 cell
    {'Ant' }
    {'Cat' }
    {'Frog'}

Ycats = categories(Y)
Ycats = 3×1 cell
    {'Bear' }
    {'Deer' }
    {'Eagle'}

然后将 XY 串联成一个分类数组。

A = [X Y]
A = 1×9 categorical
     Frog      Cat      Cat      Ant      Frog      Deer      Bear      Eagle      Deer 

列出类别。该组合并后的类别没有按字母数字顺序排列。串联只是将一组类别追加到另一组类别的末尾。

Acats = categories(A)
Acats = 6×1 cell
    {'Ant'  }
    {'Cat'  }
    {'Frog' }
    {'Bear' }
    {'Deer' }
    {'Eagle'}

对这些类别重新排序。输出分类数组与输入数组具有相同的元素。

B = reordercats(A)
B = 1×9 categorical
     Frog      Cat      Cat      Ant      Frog      Deer      Bear      Eagle      Deer 

列出类别。现在,该组合并后的类别按字母数字顺序排列。

Bcats = categories(B)
Bcats = 6×1 cell
    {'Ant'  }
    {'Bear' }
    {'Cat'  }
    {'Deer' }
    {'Eagle'}
    {'Frog' }

创建一个分类数组。

A = categorical(["red" "green" "blue" "red" "green" "red" "blue" "blue"])
A = 1×8 categorical
     red      green      blue      red      green      red      blue      blue 

显示类别。它们按字母数字顺序排列。

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

对这些类别重新排序。

B = reordercats(A,["red" "green" "blue"])
B = 1×8 categorical
     red      green      blue      red      green      red      blue      blue 

显示类别。它们现在按色谱常用的 RGB 顺序排列。

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

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

创建一个包含交通方式的有序分类数组。根据每种交通方式的平均旅行成本对类别进行排序。

A = categorical(["plane" "car" "train" "car" "plane" "car"], ...
                ["car" "train" "plane"], ...
                Ordinal=true)
A = 1×6 categorical
     plane      car      train      car      plane      car 

显示类别。由于数组 A 是有序数组,car < train < plane

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

例如,其类别为 planetrain 的任何元素都大于类别 car

A(A > "car")
ans = 1×3 categorical
     plane      train      plane 

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

B = reordercats(A,["train" "car" "plane"])
B = 1×6 categorical
     plane      car      train      car      plane      car 

显示类别。这些类别的数学顺序现在为 train < car < plane

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

例如,train 不再大于 car。关系运算 minmax 的结果反映新类别顺序。

B(B > "car")
ans = 1×2 categorical
     plane      plane 

创建一个包含交通方式的分类数组。

A = categorical(["plane" "car" "train" "car" "car" "plane" "car"])
A = 1×7 categorical
     plane      car      train      car      car      plane      car 

显示类别。

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

使用 countcats 函数计算每个类别在数组中出现的次数。

B = countcats(A)
B = 1×3

     4     2     1

创建一个从出现频率最低的类别到出现频率最高的类别的顺序。要将该顺序指定为数值向量,请使用 sort 函数的第二个输出。输出 neworder 描述如何对分类数组的类别(而不是元素)重新排序。

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

     3     2     1

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

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

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

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

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

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

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

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

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

按新顺序列出类别。

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

输入参数

全部折叠

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

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

提示

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

扩展功能

全部展开

版本历史记录

在 R2013b 中推出