您可以使用表格
在单个容器中收集混合类型数据和元数据属性(如变量名、行名、描述和变量单元)的数据类型。表适用于面向列或表格数据,这些数据通常以列的形式存储在文本文件或电子表格中。例如,您可以使用一个表来存储实验数据,行表示不同的观察结果,列表示不同的测量变量。
表由面向行和面向列的变量组成。表中的每个变量可以有不同的数据类型和大小,但每个变量必须有相同的行数。
例如,加载样本患者数据。
负载病人
然后,结合工作空间变量,收缩压
而且舒张压
变成一个血压
变量,转换工作空间变量,性别
,从字符向量的单元格数组到分类数组。
血压=[收缩压舒张压];性别=分类的(性别);谁(“性别”,“年龄”,“抽烟”,“血压”)
名称大小字节类属性年龄100x1 800倍血压100x2 1600倍性别100x1 330分类吸烟者100x1 100逻辑
的变量年龄
,血压
,性别
,吸烟者
具有不同的数据类型,并且是存储在表中的候选数据,因为它们都具有相同的行数,即100。
现在,根据变量创建一个表并显示前五行。
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包含字段的struct数组:性别年龄吸烟者血压
结构数组使用命名字段组织记录。每个字段的值可以有不同的数据类型或大小。的第一个元素显示命名字段StructArray
.
StructArray (1)
ans =带字段的结构:性别:男年龄:38岁吸烟:1血压:[124 93]
结构数组中的字段类似于表中的变量。但是,与表不同的是,您不能在字段中强制同质性。例如,您可以有一些值S.Gender
它们是分类数组元素,男性
或女
,其他是字符向量,“男”
或“女”
,和其他整数,0
或1
.
现在考虑相同的数据存储在标量结构,其中有四个字段,每个字段包含表中的一个变量。
ScalarStruct =结构(...“性别”{性别},...“年龄”、年龄、...“抽烟”,抽烟,...“血压”、血压)
ScalarStruct =带字段的结构:性别:[100x1分类]年龄:[100x1双]吸烟者:[100x1逻辑]血压:[100x2双]
与表不同,您不能强制数据是矩形的。例如,字段ScalarStruct。年龄
可以是与其他字段不同的长度。
表允许您维护矩形结构(类似于结构数组)并强制变量的同质性(类似于标量结构中的字段)。尽管单元格数组没有命名字段,但它们有许多与结构数组和标量结构相同的缺点。如果您有每个变量都相同的矩形数据,可以考虑使用表格。然后可以使用数字索引或命名索引,还可以使用表属性存储元数据。
可以使用圆括号、花括号或点索引到表中。圆括号允许您选择表中数据的子集并保留表容器。花括号和点索引允许您从表中提取数据。在每个表索引方法中,您可以通过名称或数字索引指定要访问的行或变量。
考虑上面的示例表。表中的每一行,T
,代表不同的病人。工作空间变量,姓
,包含100行的唯一标识符。属性将行名添加到表中RowNames
财产姓
并显示已更新表的前五行。
T.Properties.RowNames = LastName;: 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
现在,使用数字索引返回一个等价的子表。返回第二个和第四个变量的第三行和第五行。
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双属性:单位:年数值:Min 25中位数39最大50吸烟者:100x1逻辑属性:描述:真或假值:真34假66血压:100x2双属性:描述:收缩压/舒张压值:第1列第2列________ ________最小109 68中位数122 81.5最大138 99
结构和单元格数组没有用于存储元数据的属性。