你可以使用表格
数据类型,用于在单个容器中收集混合类型的数据和元数据属性,如变量名、行名、描述和变量单元。表适用于面向列或列表的数据,这些数据通常以列的形式存储在文本文件或电子表格中。例如,您可以使用表来存储实验数据,行表示不同的观察结果,列表示不同的测量变量。
表由面向行和面向列的变量组成。表中的每个变量可以有不同的数据类型和不同的大小,但每个变量必须具有相同的行数。
例如,加载样本患者数据。
负载病人
然后,结合工作空间变量,收缩压
和舒张压
成一个单一的血压
变量并转换工作区变量,性别
,将字符向量单元格数组转换为分类数组。
血压=[收缩压舒张压];性别=分类(性别);谁(“性别”,“年龄”,“抽烟”,“血压”)
名称大小字节类属性年龄100x1 800双血压100x2 1600双性别100x1 330类别吸烟者100x1 100逻辑
的变量年龄
,血压
,性别
,吸烟者
具有不同的数据类型,它们都是存储在表中的候选者,因为它们都有相同的行数,100。
现在,根据变量创建一个表并显示前5行。
T =表(性别、年龄、吸烟、血压);: T (1:5)
ans =5×4表性别年龄吸烟者血压_________ ______ _____________男性38真124 93男43假109 77女38假125 83女40假117 75女49假122 80
表格以表格格式显示,变量名在顶部。
表中的每个变量都是单一的数据类型。如果向表中添加新行,MATLAB®会强制新数据与相应的表变量之间的数据类型保持一致。例如,如果您试图添加新患者的信息,其中第一列包含患者的年龄而不是性别,如表达式中所示T(end+1,:) = {37,{'Female'},true,[130 84]}
,则会收到错误:
对分类数组赋值的RHS无效。
错误发生的原因是MATLAB®不能分配数值数据,37
,转换为分类数组,性别
.
为了比较表和结构,考虑结构数组,StructArray
,这相当于表格,T
.
StructArray = table2struct (T)
StructArray =100×1带有字段的结构数组:性别年龄吸烟者血压
结构数组使用命名字段组织记录。每个字段的值可以有不同的数据类型或大小。现在,显示的第一个元素的命名字段StructArray
.
StructArray (1)
ans =结构体字段:性别:男性年龄:38吸烟者:1血压:[124 93]
结构数组中的字段类似于表中的变量。但是,与表不同的是,不能强制字段内的同质性。例如,你可以有S.Gender
分类数组元素,男性
或女
,其他是字符向量,“男”
或“女”
,以及其他整数,0
或1
.
现在考虑相同的数据存储在标量结构,有四个字段,每个字段包含表中的一个变量。
ScalarStruct =结构(...“性别”{性别},...“年龄”、年龄、...“抽烟”,抽烟,...“血压”、血压)
ScalarStruct =结构体字段:性别:[100x1分类]年龄:[100x1 double]吸烟者:[100x1 logical]血压:[100x2 double]
与表格不同,不能强制数据为矩形。例如,字段ScalarStruct。年龄
可以与其他字段的长度不同。
表允许维护矩形结构(如结构数组)并强制变量的同质性(如标量结构中的字段)。尽管单元格数组没有命名字段,但它们有许多与结构数组和标量结构相同的缺点。如果你有矩形数据,每个变量都是相同的,考虑使用表格。然后可以使用数字或命名索引,还可以使用表属性存储元数据。
可以使用圆括号、花括号或点索引来索引表。圆括号允许您选择表中数据的一个子集并保留表容器。花括号和点索引允许您从表中提取数据。在每个表索引方法中,您可以根据名称或数字索引指定要访问的行或变量。
考虑上面的示例表。表格中的每一行,T
,代表不同的病人。工作空间变量,姓
,包含100行的唯一标识符。属性将行名添加到表中RowNames
财产姓
并显示已更新表的前五行。
T.Properties.RowNames =姓;: T (1:5)
ans =5×4表性别年龄吸烟者血压_________ ______ _____________史密斯男性38真124 93约翰逊男性43假109 77威廉姆斯女性38假125 83琼斯女性40假117 75棕色女性49假122 80
除了标记数据之外,还可以使用行名和变量名访问表中的数据。例如,使用命名索引显示患者的年龄和血压威廉姆斯
和棕色(的)
.
T ({”威廉姆斯,“棕色”},{“年龄”,“血压”})
ans =2×2表年龄血压___ _____________威廉姆斯38 125 83布朗49 122 80
现在,使用数字索引来返回一个等价的子表。返回第二个和第四个变量的第三和第5行。
T (3:2:5 2:2:4)
ans =2×2表年龄血压___ _____________威廉姆斯38 125 83布朗49 122 80
对于单元格数组或结构,您没有使用命名或数字索引的相同灵活性。
对于单元格数组,您必须使用比较字符串
查找所需的已命名数据,然后可以在数组中建立索引。
对于标量结构或结构数组,不能通过数字引用字段。此外,对于标量结构,您无法轻松地选择变量的子集或观察值的子集。使用结构数组,您可以选择观察值的子集,但不能选择变量的子集。
对于表,您可以通过命名索引或数字索引访问数据。此外,您可以轻松地选择变量的子集和行的子集。
有关表索引的更多信息,请参见表格访问数据.
除了存储数据之外,表还具有存储元数据的属性,例如变量名、行名、描述和变量单元。您可以使用T.Properties.PropName
,在那里T是桌名和PropName是表属性之一。
例如,为添加表描述、变量描述和变量单位年龄
.
T.Properties.Description =模拟病人数据的;T.Properties.VariableDescriptions =...{男性或女性的...”...真或假的...收缩压/舒张压的};T.Properties.VariableUnits {“年龄”} =“年”;
的单元格数组中的单个空字符向量VariableDescriptions
表示对应的变量没有描述。有关的更多信息,请参见属性部分表格
.
要打印表格摘要,请使用总结
函数。
总结(T)
描述:模拟患者数据变量:性别:100x1分类属性:描述:男性或女性值:女性53男性47年龄:100x1 double属性:单位:Yrs值:Min 25中位数39 Max 50吸烟者:100x1逻辑属性:描述:真或假值:真34假66血压:100x2 double属性:描述:收缩期/舒张期值:列1列2 ________ ________ Min 109 68中位122 81.5 Max 138 99
结构和单元格数组没有用于存储元数据的属性。