使用分类数组访问数据
按类别选择数据
根据数据的值选择数据通常是有用的。这种类型的数据选择包括基于一个变量中的值创建一个逻辑向量,然后使用该逻辑向量选择其他变量中的值的子集。通过在数值数组中查找位于某个范围内的值,可以创建用于选择数据的逻辑向量。此外,您可以通过查找特定的离散值来创建逻辑向量。在使用分类数组时,您可以轻松地:
从特定类别中选择元素。对于分类数组,使用逻辑运算符
= =
或~ =
选择属于或不属于特定类别的数据。要选择特定类别组中的数据,请使用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_CountyGenIndex
100 × 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(位置);
undefinedIndex
62 × 1的分类数组是否包含逻辑真正的
(1
中所有未定义的元素位置
.
设置未定义元素
使用总结
中未定义元素的数量位置
.
总结(位置)
圣玛丽医疗中心24
第一个元素位置
属于,圣玛丽医疗中心
.将第一个元素设为未定义的
所以它不再属于任何类别。
位置(1)=' <定义> ';总结(位置)
圣玛丽医疗中心
您可以创建选定的元素未定义的
无需删除类别或更改其他元素的类别。将元素设置为未定义的
表示具有未知值的元素。
预分配未定义元素的分类数组
您可以使用未定义元素来预分配分类数组的大小,以获得更好的性能。创建一个类别数组,其中只有位置已知的元素。
definedIndex = ~isundefined(位置);newLocation =位置(definedIndex);总结(newLocation)
圣玛丽医疗中心
的大小newLocation
这是一个200 × 1的分类数组。将最后一个新元素设置为未定义的
.所有其他的新元素也被设定为未定义的
.23个原始元素保持了它们的值。
newLocation (200) =' <定义> ';总结(newLocation)
圣玛丽医疗中心177
newLocation
有空间存放计划稍后存储在数组中的值。
另请参阅
任何
|分类
|类别
|柱状图
|isundefined
|removecats
|总结