一、功能
categorical 是为一组有限的离散类别(例如 High、Med 和 Low)赋值的数据类型。这些类别可以采用您指定的数学排序,例如 High > Med > Low,但这并非必须。分类数组可用来有效地存储并方便地处理非数值数据,同时还为数值赋予有意义的名称。分类数组的常见用法是用来指定构成表的各组行。
二、语法
语法1
B = categorical(A) 根据数组 A 创建分类数组。B 的类别是 A 的唯一值且经过排序。
语法2
B = categorical(A,valueset) 为 valueset 中的每个值创建一个类别。B 的类别与 valueset 的值具有相同的顺序。
您可以使用 valueset 来包含 A 中不存在的值的类别。反之,如果 A 包含 valueset 中不存在的任何值,则 B 的对应元素为未定义。
语法3
B = categorical(A,valueset,catnames) 通过将 valueset 中的类别值与 catnames 中的名称匹配来命名 B 中的类别。
语法4
B = categorical(A,___,Name,Value) 创建分类数组,其中通过一个或多个 Name,Value 对组参数指定其他选项。您可以包括上述语法中的任何输入参数。
例如,要指示类别采用数学排序,请指定 'Ordinal',true。
三、输入参数
A — 输入数组
数值数组 | 逻辑数组 | 分类数组 | 日期时间数组 | 持续时间数组 | 字符串数组 | 字符向量元胞数组
输入数组,指定为数值数组、逻辑数组、分类数组、日期时间数组、持续时间数组、字符串数组或字符向量元胞数组。
categorical 会删除作为字符串或字符向量的输入值中的前导和尾部空格。
如果 A 包含缺失值,则 B 的相应元素未定义,并显示为 <undefined>。categorical 函数可将下列值转换为未定义的类别值:
数值数组和持续时间数组中的 NaN
字符串数组中的缺失字符串 (<missing>) 或空字符串 ("")
字符向量元胞数组中的空字符向量 ('')
日期时间数组中的 NaT
分类数组中未定义的值 (<undefined>)
对于未定义的值,B 没有对应的类别。要为缺失值或未定义的值创建显式类别,必须在 catnames 中给出所需的类别名称,并在 valueset 中给出缺失值作为对应的值。
A 还可以是具有以下类方法的对象数组:
unique
eq
valueset — 类别
unique(A) (默认) | 由唯一值组成的向量
类别,指定为由唯一值组成的向量。valueset 的数据类型和 A 的数据类型必须相同,A 为字符串数组时除外。在这种情况下,valueset 可以是字符串数组或字符向量元胞数组。
categorical 会删除作为字符串或字符向量的 valueset 元素中的前导和尾部空格。
catnames — 类别名称
字符向量元胞数组 | 字符串数组
类别名称,指定为字符向量元胞数组或字符串数组。如果不指定 catnames 输入参数,categorical 将使用 valueset 中的值作为类别名称。
要将 A 中多个不同的值合并为 B 中的单个类别,请包括与这些值对应的、完全一样的名称。
四、示例
首先,创建包含温度读数、日期和台站标签的阵列。
Temps = [58; 72; 56; 90; 76];
Dates = {'2017-04-17';'2017-04-18';'2017-04-30';'2017-05-01';'2017-04-27'};
Stations = {'S1';'S2';'S1';'S3';'S2'};
将桩号转换为类别数组。
Stations = categorical(Stations)
显示类别。三个桩号标签是类别。
categories(Stations)
创建包含温度、日期和桩号标签的表。
T = table(Temps,Dates,Stations)
显示从站S2获取的读数。可以使用==运算符查找等于S2的桩号值。然后使用逻辑索引选择包含来自站点S2的数据的表行。
TF = (T.Stations == 'S2');
T(TF,:)
输出的结果: