此示例演示如何从工作空间变量创建表、处理表数据以及将表写入文件以供以后使用。表格
是一种数据类型,用于在单个容器中收集异构数据和元数据属性,如变量名、行名、描述和变量单元。
表适用于面向列或表格数据,这些数据通常以列的形式存储在文本文件或电子表格中。表中的每个变量可以具有不同的数据类型,但必须具有相同的行数。然而,表中的变量并不局限于列向量。例如,一个表变量可以包含一个有多个列的矩阵,只要它的行数与其他表变量相同。表的一个典型用途是存储实验数据,其中行表示不同的观察结果,列表示不同的测量变量。
表是收集和组织相关数据变量以及查看和汇总数据的方便容器。例如,您可以提取变量来执行计算,并方便地将结果作为新表变量添加。完成计算后,将表写入一个文件以保存结果。
从工作区变量创建一个表并查看它。另外,使用导入工具或者是readtable
函数从电子表格或文本文件创建表。当使用这些函数从文件导入数据时,每一列都成为表变量。
加载100例患者的样本数据病人
mat文件到工作区变量。
负载病人谁
名称大小字节类别属性年龄100x1 800双舒张期100x1 800双性别100x1 11412 cell身高100x1 800双LastName 100x1 11616 cell位置100x1 14208 cell SelfAssessedHealthStatus 100x1 11540 cell吸烟者100x1 100逻辑收缩压100x1 800双体重100x1 800双
用包含患者数据的面向列变量填充表。可以通过名称访问和分配表变量。从工作空间变量分配表变量时,可以为表变量分配不同的名称。
创建一个表,并用性别
,吸烟者
,高度
,重量
工作空间变量。显示前五行。
T =表(性别、吸烟、身高、体重);: T (1:5)
ans =5×4表性别吸烟者身高体重__________ ______ ______ ______{'男'}真71 176{'男'}假69 163{'女'}假64 131{'女'}假67 133{'女'}假64 119
作为一种替代方法,请使用readtable
函数从逗号分隔的文件中读取患者数据。readtable
读取文件中的所有列。
通过读取文件中的所有列来创建一个表,patients.dat
。
T2 = readtable (“patients.dat”);: T2 (1:5)
ans =5×10表LastName性别年龄身高体重吸烟者收缩压舒张压SelfAssessedHealthStatus位置 ____________ __________ ___ _____________________________ ______ ______ ______ ________ _________ ________________________ {' 史密斯的38}{‘男性’}{县综合医院的}71 176 1 124 93{‘优秀’}{“约翰逊”}{‘男性’}43 {VA医院的}69 163 0 109 77{‘公平’}{威廉姆斯的}{‘女性’}38{圣。玛丽医疗中心'}64 131 0 125 83{'好'}{'琼斯'}{'女'}40{'弗吉尼亚州医院'}67 133 0 117 75{'公平'}{'布朗'}{'女'}49{'县总医院'}64 119 0 122 80{'好'}
你可以使用点表示法分配更多面向列的表变量,T.varname
,在那里T
是桌子和varname
所需的变量名。创建随机数标识符。然后将它们分配给一个表变量,并命名该表变量ID
。分配给表的所有变量必须具有相同的行数。的前五行显示T
。
e4,100 T.ID =兰迪(1,1);: T (1:5)
ans =5×5表性别吸烟者身高体重ID __________ ______ ______ __________{'男'}真71 176 8148{'男'}假69 163 9058{'女'}假64 131 1270{'女'}假67 133 9134{'女'}假64 119 6324
分配给表的所有变量必须具有相同的行数。
控件创建表摘要,以查看每个变量的数据类型、描述、单位和其他描述性统计信息总结
函数。
总结(T)
变量:性别:100x1字符向量单元数组吸烟者:100x1逻辑值:True 34 False 66身高:100x1 double值:Min 60中位数67 Max 72体重:100x1 double值:Min 111中位数142.5 Max 202 ID: 100x1 double值:Min 120中位数5485.5 Max 9706
返回表的大小。
大小(T)
ans =1×2100年5
T
包含100行和5个变量。
创建一个新的较小的表,其中包含的前五行T
和显示。可以在圆括号内使用数字索引来指定行和变量。此方法类似于索引到数字数组以创建子数组。Tnew
是一个5乘5的表格。
: Tnew = T (1:5)
Tnew =5×5表性别吸烟者身高体重ID __________ ______ ______ __________{'男'}真71 176 8148{'男'}假69 163 9058{'女'}假64 131 1270{'女'}假67 133 9134{'女'}假64 119 6324
的所有行创建一个更小的表Tnew
从第二个到最后一个的变量。使用结束
关键字来指示表的最后一个变量或最后一行。Tnew
是一个5乘4的表格。
Tnew = Tnew(:, 2:结束)
Tnew =5×4表吸烟者身高体重ID ______ ______ ______ ____ true 71 176 8148假69 163 9058假64 131 1270假67 133 9134假64 119 6324
将行名添加到T
并使用行名和变量名而不是数字索引索引到表中。属性来添加行名姓
的工作区变量RowNames
的属性T
。
T.Properties.RowNames =姓;
的前五行显示T
行名称。
: T (1:5)
ans =5×5表性别吸烟者身高体重ID __________ ______ ______ __________史密斯{'男'}真71 176 8148约翰逊{'男'}假69 163 9058威廉姆斯{'女'}假64 131 1270琼斯{'女'}假67 133 9134布朗{'女'}假64 119 6324
返回的大小T
。大小不会改变,因为在计算表的大小时不包括行名和变量名。
大小(T)
ans =1×2100年5
选择姓氏患者的所有数据“史密斯”
而且“约翰逊”
。在这种情况下,使用行名比使用数字索引更简单。Tnew
是一个2乘5的表。
Tnew = T ({“史密斯”,“约翰逊”},:)
Tnew =2×5表性别吸烟身高体重ID ________ ______ ______ ______ ____史密斯{'男'}真71 176 8148约翰逊{'男'}假69 163 9058
选择病人的身高和体重“约翰逊”
通过对变量名建立索引。Tnew
是一个1乘2的表。
Tnew = T (“约翰逊”,{“高度”,“重量”})
Tnew =1×2表身高体重______ ______约翰逊69 163
您可以使用点语法访问表变量,例如T.Height
,或通过命名索引,如T(:,“高度”)
。
您可以访问表变量的内容,然后使用MATLAB®函数对它们执行计算。计算身体质量指数(身体质量指数
)基于现有表变量中的数据,并将其作为一个新变量添加。绘制的关系身体质量指数
病人是吸烟还是不吸烟。将血压读数添加到表格中,并绘制出血压与BMI的关系。
计算身体质量指数
使用表变量,重量
而且高度
。您可以提取重量
而且高度
便于计算,同时便于保管重量
,高度
,身体质量指数
和其他病人的数据放在一起。的前五行显示T
。
T.BMI = (T.Weight * 0.453592)。/ (T.Height * 0.0254)。^ 2;: T (1:5)
ans =5×6表性别吸烟者身高体重ID BMI __________ ______ ______ __________ ______史密斯{'Male'}真71 176 8148 24.547约翰逊{'Male'}假69 163 9058 24.071威廉姆斯{'Female'}假64 131 1270 22.486琼斯{'Female'}假67 133 9134 20.831布朗{'Female'}假64 119 6324 20.426
的变量单位和变量描述属性身体质量指数
。您可以向任何表变量添加元数据,以进一步描述变量中包含的数据。
T.Properties.VariableUnits {“身体质量指数”}=公斤/ m ^ 2的;T.Properties.VariableDescriptions {“身体质量指数”}=“身体质量指数”;
创建一个直方图来探讨这组患者中吸烟和体重指数之间是否存在关系。你可以索引到身体质量指数
的逻辑值吸烟者
表变量,因为每一行包含身体质量指数
而且吸烟者
同一病人的价值。
tf = (t . smokers == false);h1 =直方图(T.BMI (tf),“BinMethod”,“整数”);持有在tf = (t .吸烟者== true);h2 =直方图(T.BMI (tf),“BinMethod”,“整数”);包含(“BMI(公斤/ m ^ 2)”);ylabel (“患者”);传奇(“不吸烟”,“烟民”);标题("吸烟者和非吸烟者的BMI分布");持有从
从工作空间变量中添加患者的血压读数收缩压
而且舒张压
。每行包含收缩压
,舒张压
,身体质量指数
同一病人的价值。
T.Systolic =收缩压;T.Diastolic =舒张压;
创建一个直方图来显示的高值之间是否有关系舒张压
而且身体质量指数
。
tf = (T.BMI <= 25);h1 =直方图(T.Diastolic (tf),“BinMethod”,“整数”);持有在tf = (T.BMI > 25);h2 =直方图(T.Diastolic (tf),“BinMethod”,“整数”);包含(“舒张压读数(mmhg)”);ylabel (“患者”);传奇(BMI < = 25的,“体重指数> 25”);标题(“低和高BMI的舒张压读数”);持有从
要准备输出表,请按名称对表行重新排序,并按位置或名称对表变量重新排序。展示餐桌的最终布置。
按行名对表进行排序,以便按字母顺序列出患者。
T = sortrows (T)“RowNames”);: T (1:5)
ans =5×8表性别吸烟者身高体重ID BMI收缩压舒张压__________ ______ ______ __________ ______ ________ _________亚当斯{'女'}假66 137 8235 22.112 127 83亚历山大{'男'}真69 171 1300 25.252 128 99艾伦{'女'}假63 143 7432 25.331 113 80安德森{'女'}假68 128 1577 19.462 114 77贝利{'女'}假68 130 2239 19.766 113 81
创建一个血压
变量将血压读数保存在一个100 × 2的表变量中。
T.BloodPressure = [T。收缩压T。舒张压];
删除收缩压
而且舒张压
从表中删除,因为它们是多余的。
T.Systolic = [];T.Diastolic = [];: T (1:5)
ans =5×7表性别吸烟者身高体重ID BMI血压__________ ____________ __________ ______ _____________亚当斯{'女'}假66 137 8235 22.112 127 83亚历山大{'男'}真69 171 1300 25.252 128 99艾伦{'女'}假63 143 7432 25.331 113 80安德森{'女'}假68 128 1577 19.462 114 77贝利{'女'}假68 130 2239 19.766 113 81
把ID
作为第一列,按位置对表变量重新排序。
T = T(:,[5 1:4 6 7]);: T (1:5)
ans =5×7表ID性别吸烟者身高体重BMI血压____ __________ ____________ ____________ _____________亚当斯8235{'女'}假66 137 22.112 127 83亚历山大1300{'男'}真69 171 25.252 128 99艾伦7432{'女'}假63 143 25.331 113 80安德森1577{'女'}假68 128 19.462 114 77贝利2239{'女'}假68 130 19.766 113 81
还可以按名称对表变量重新排序。对表变量进行重新排序性别
最后:
找到“性别”
在VariableNames
属性。
移动“性别”
到变量名单元格数组的末尾。
使用名称单元格数组对表变量重新排序。
varnames = T.Properties.VariableNames;别人= ~ strcmp (“性别”, varnames);varnames = [varnames(别人)“性别”];T = T (:, varnames);
显示重新排序表的前五行。
: T (1:5)
ans =5×7表ID吸烟者身高体重BMI血压性别__________ ____________ ______ _____________ __________亚当斯8235假66 137 22.112 127 83{'女'}亚历山大1300真69 171 25.252 128 99{'男'}艾伦7432假63 143 25.331 113 80{'女'}安德森1577假68 128 19.462 114 77{'女'}贝利2239假68 130 19.766 113 81{'女'}
可以将整个表写入文件,也可以创建子表,将原始表的选定部分写入单独的文件。
写T
的文件writetable
函数。
writetable (T)“allPatientsBMI.txt”);
您可以使用readtable
函数来读取数据allPatientsBMI.txt
到一个新表中。
创建子表并将子表写入一个单独的文件。删除包含吸烟患者数据的行。然后删除吸烟者
变量。不吸烟者
仅包含非吸烟者的数据。
不吸烟者= T;删除=(不吸烟者。吸烟者= = true);不吸烟者(删除:)= [];不吸烟者。吸烟者= [];
写不吸烟者
到一个文件。
writetable(不抽烟,“nonsmokersBMI.txt”);
array2table
|cell2table
|导入工具|readtable
|sortrows
|struct2table
|总结
|表格
|writetable