文档

使用分类数组访问数据

按类别选择数据

根据数据的值选择数据通常是有用的。这种类型的数据选择包括基于一个变量中的值创建一个逻辑向量,然后使用该逻辑向量选择其他变量中的值的子集。通过在数值数组中查找位于某个范围内的值,可以创建用于选择数据的逻辑向量。此外,您可以通过查找特定的离散值来创建逻辑向量。在使用分类数组时,您可以轻松地:

  • 从特定类别中选择元素。对于分类数组,使用逻辑运算符= =~ =选择属于或不属于特定类别的数据。要选择特定类别组中的数据,请使用ismember函数。

    对于序数分类数组,使用不等式>> =<,或< =在特定类别之上或之下的类别中查找数据。

  • 删除属于特定类别的数据。使用逻辑运算符包括或排除来自特定类别的数据。

  • 查找不在已定义类别中的元素。类别数组指出哪些元素不属于定义的类别<定义>.使用isundefined函数查找没有定义值的观察值。

使用分类数组访问数据的常用方法

这个例子展示了如何使用分类数组建立索引和搜索。您可以以类似的方式使用存储在表中的分类数组访问数据。

加载样例数据

负载从100例患者收集的样本数据。

负载病人
名称大小字节类别属性年龄100x1 800双舒张压100x1 800双性别100x1 12212 cell身高100x1 800双LastName 100x1 12416 cell位置100x1 15008 cell SelfAssessedHealthStatus 100x1 12340 cell吸烟者100x1 100逻辑收缩压100x1 800双体重100x1 800双

从字符向量的单元格数组创建分类数组

性别而且位置包含属于类别的数据。每个单元格数组包含从一小组惟一值(分别表示两种性别和三个位置)中提取的字符向量。转换性别而且位置到分类数组。

性别=绝对的(性别);位置=类别(位置);

搜索单一类别的成员

对于分类数组,可以使用逻辑运算符= =而且~ =查找属于或不属于特定类别的数据。

确定那里是否有病人,“壁垒总医院”

(位置= =“壁垒总医院”
ans =逻辑0

兰帕特总医院没有观察到病人。

搜索一组类别的成员

你可以用ismember在特定类别组中查找数据。为观察到的病人创建一个逻辑向量县总医院VA医院

VA_CountyGenIndex =ismember(位置,{“县总医院”VA医院的});

VA_CountyGenIndex100 × 1的逻辑数组是否包含logical真正的1)用于分类数组中的每个元素位置那是这个类别的一个成员县总医院VA医院.输出,VA_CountyGenIndex包含76个非零元素。

使用逻辑向量,VA_CountyGenIndex选择在任何一个观察的病人中县总医院VA医院

VA_CountyGenPatients = LastName(VA_CountyGenIndex);

VA_CountyGenPatients是一个76 × 1的字符向量单元格数组。

选择要绘制的特定类别中的元素

使用总结函数打印一个摘要,其中包含类别名称和每个类别中的元素数量。

总结(位置)
县总医院39圣玛丽医疗中心24 VA医院37

位置是一个包含三个类别的100 × 1类别数组。县总医院出现在39个元素中,圣玛丽医疗中心在24个元素中,和VA医院包含37种元素。

使用总结的摘要性别

总结(性别)
女53男47

性别是一个包含两个类别的100 × 1类别数组。出现在53个元素中男性出现在47个元素中。

使用逻辑运算符= =仅访问女性患者的年龄。然后绘制这个数据的直方图。

图()直方图(年龄(性别= =“女”)标题(“女性患者年龄”

直方图(年龄(性别= = '女'))绘制53例女性患者的年龄数据。

删除特定类别的数据

您可以使用逻辑运算符来包含或排除来自特定类别的数据。删除所有观察到的患者VA医院从工作空间变量中,年龄而且位置

年龄=年龄(地点~=VA医院的);位置=位置(位置~=VA医院的);

现在,年龄是一个63 × 1的数字数组,并且位置是一个63 × 1的分类数组。

列出以下类别位置,以及每个类别的元素数量。

总结(位置)
县总医院39圣玛丽医疗中心24 VA医院0

观察的患者VA医院被删除位置,但VA医院仍然是一个类别。

使用removecats删除功能VA医院位置

Location = removecats(Location,VA医院的);

验证类别,VA医院,已被删除。

类别(位置)
ans =2x1单元阵列{'县总医院'}{'圣。玛丽医疗中心

位置是一个63 × 1的类别数组,它有两个类别。

删除元素

可以通过建立索引来删除元素。例如,您可以删除的第一个元素位置通过选择剩下的元素位置(2:结束).但是,删除元素的更简单的方法是使用[]

位置(1)= [];总结(位置)
县总医院38圣玛丽医疗中心

位置是一个62 × 1的类别数组,它有两个类别。删除第一个元素对来自同一类别的其他元素没有影响,也不会删除类别本身。

检查未定义数据

删除类别县总医院位置

Location = removecats(Location,“县总医院”);

显示分类数组的前八个元素,位置

位置(1:8)
ans =8x1分类数组圣玛丽医疗中心<未定义>圣玛丽医疗中心圣玛丽医疗中心<未定义> <未定义>圣玛丽医疗中心圣玛丽医疗中心

删除类别后,县总医院,以前属于该类别的元素不再属于为其定义的任何类别位置.分类数组将这些元素表示为未定义的

使用函数isundefined找到不属于任何类别的观察。

undefinedIndex = isundefined(位置);

undefinedIndex62 × 1的分类数组是否包含逻辑真正的1中所有未定义的元素位置

设置未定义元素

使用总结中未定义元素的数量位置

总结(位置)
圣玛丽医疗中心24

第一个元素位置属于,圣玛丽医疗中心.将第一个元素设为未定义的所以它不再属于任何类别。

位置(1)=' <定义> ';总结(位置)
圣玛丽医疗中心

您可以创建选定的元素未定义的无需删除类别或更改其他元素的类别。将元素设置为未定义的表示具有未知值的元素。

预分配未定义元素的分类数组

您可以使用未定义元素来预分配分类数组的大小,以获得更好的性能。创建一个类别数组,其中只有位置已知的元素。

definedIndex = ~isundefined(位置);newLocation =位置(definedIndex);总结(newLocation)
圣玛丽医疗中心

的大小newLocation这是一个200 × 1的分类数组。将最后一个新元素设置为未定义的.所有其他的新元素也被设定为未定义的.23个原始元素保持了它们的值。

newLocation (200) =' <定义> ';总结(newLocation)
圣玛丽医疗中心177

newLocation有空间存放计划稍后存储在数组中的值。

另请参阅

||||||

相关的例子

更多关于