Matlab中创建和使用表

您所在的位置:网站首页 matlab怎么创建一个文件夹 Matlab中创建和使用表

Matlab中创建和使用表

2023-12-23 02:54| 来源: 网络整理| 查看: 265

目录

创建并查看表

按行和变量名称访问数据

计算结果并将其添加为表变量

对表变量和输出行进行重新排序

将表写入文件

        以下示例说明如何根据工作区变量创建表,使用表数据,并将表写入文件以供日后使用。table是一个数据类型,可将异构数据和元数据属性(例如变量名称、行名称、说明和变量单位)收集到一个容器中。

        表适用于列向数据或表格数据,这些数据通常以列形式存储于文本文件或电子表格中。表中的每个变量可以具有不同的数据类型,但必须具有相同的行数。不过,表中的变量并不限于列向量。例如,表变量可以包含具有多列的矩阵,只要它的行数与其他表变量相同即可。表的典型用途是存储试验数据,使用行表示不同的观测值,使用列表示不同的测量变量。

        表是用于收集和整理相关数据变量以及查看和汇总数据的便捷容器。例如,可以提取变量以执行计算并方便地将相应结果添加为新的表变量。完成计算时,将该表写入文件以保存结果。

创建并查看表

        根据工作区变量创建一个表并查看它。或者,使用导入工具或readtable功能根据电子表格或文本文件创建表。使用这些函数从文件导入数据时,每个列都会变为表变量。

        将 100 位患者的样本数据从 patients MAT 文件加载到工作区变量中。

load patients whos Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 12212 cell Height 100x1 800 double LastName 100x1 12416 cell Location 100x1 15008 cell SelfAssessedHealthStatus 100x1 12340 cell Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double

        使用包含患者数据的列向变量填充表。可以按名称访问和分配表变量。当从工作区变量分配表变量时,可以为表变量指定不同名称。

        创建一个表并使用 Gender、Smoker、Height 和 Weight 工作区变量填充它。显示前五行。

T = table(Gender,Smoker,Height,Weight); T(1:5,:) ans=5×4 table Gender Smoker Height Weight __________ ______ ______ ______ {'Male' } true 71 176 {'Male' } false 69 163 {'Female'} false 64 131 {'Female'} false 67 133 {'Female'} false 64 119

        作为备选方法,可以使用 readtable 函数从逗号分隔文件中读取患者数据。readtable 会读取文件中的所有列。

        通过读取文件 patients.dat 中的所有列来创建一个表。

T2 = readtable('patients.dat'); T2(1:5,:) ans=5×10 table LastName Gender Age Location Height Weight Smoker Systolic Diastolic SelfAssessedHealthStatus ____________ __________ ___ _____________________________ ______ ______ ______ ________ _________ ________________________ {'Smith' } {'Male' } 38 {'County General Hospital' } 71 176 1 124 93 {'Excellent'} {'Johnson' } {'Male' } 43 {'VA Hospital' } 69 163 0 109 77 {'Fair' } {'Williams'} {'Female'} 38 {'St. Mary's Medical Center'} 64 131 0 125 83 {'Good' } {'Jones' } {'Female'} 40 {'VA Hospital' } 67 133 0 117 75 {'Fair' } {'Brown' } {'Female'} 49 {'County General Hospital' } 64 119 0 122 80 {'Good' }

        可以使用圆点表示法T.varname分配多个列向表变量,其中T是表,varname是所需的变量名称。创建随机的数字标识符。然后,将其赋给一个表变量,并将该表变量命名为 ID。分配到表中的所有变量必须具有相同的行数。显示 T 的前五行。

T.ID = randi(1e4,100,1); T(1:5,:) ans=5×5 table Gender Smoker Height Weight ID __________ ______ ______ ______ ____ {'Male' } true 71 176 8148 {'Male' } false 69 163 9058 {'Female'} false 64 131 1270 {'Female'} false 67 133 9134 {'Female'} false 64 119 6324

        分配到表中的所有变量必须具有相同的行数。

        使用summary函数创建汇总表来查看每个变量的数据类型、说明、单位和其他描述性统计量。

summary(T) Variables: Gender: 100x1 cell array of character vectors Smoker: 100x1 logical Values: True 34 False 66 Height: 100x1 double Values: Min 60 Median 67 Max 72 Weight: 100x1 double Values: Min 111 Median 142.5 Max 202 ID: 100x1 double Values: Min 120 Median 5485.5 Max 9706

        返回表的大小。

size(T) ans = 1×2 100 5

        T包含100行和5个变量。

        创建一个新的包含 T 中前五行的较小表并显示该表。可以在括号中使用数值索引指定行和变量。此方法类似于通过索引数值数组来创建子数组的情况。Tnew是一个 5×5 的表。

Tnew = T(1:5,:) Tnew=5×5 table Gender Smoker Height Weight ID __________ ______ ______ ______ ____ {'Male' } true 71 176 8148 {'Male' } false 69 163 9058 {'Female'} false 64 131 1270 {'Female'} false 67 133 9134 {'Female'} false 64 119 6324

        创建一个包含 Tnew 中所有行以及第二至最后行中的变量的较小表。使用end关键字指示表的最后一个变量或最后一行。Tnew是一个 5×4 的表。

Tnew = Tnew(:,2:end) Tnew=5×4 table Smoker Height Weight ID ______ ______ ______ ____ true 71 176 8148 false 69 163 9058 false 64 131 1270 false 67 133 9134 false 64 119 6324 按行和变量名称访问数据

        使用行和变量名称而非数值索引向 T 中添加行名称并对表进行索引。通过将 LastName 工作区变量赋给 T 的 RowNames 属性来添加行名称。

T.Properties.RowNames = LastName;

        显示 T 的前五行以及行名称。

T(1:5,:) ans=5×5 table Gender Smoker Height Weight ID __________ ______ ______ ______ ____ Smith {'Male' } true 71 176 8148 Johnson {'Male' } false 69 163 9058 Williams {'Female'} false 64 131 1270 Jones {'Female'} false 67 133 9134 Brown {'Female'} false 64 119 6324

        返回 T 的大小。此大小不会更改,因为在计算表大小时不会包括行和变量名称。

size(T) ans = 1×2 100 5

        选择姓氏为 'Smith' 和 'Johnson' 的患者的所有数据。在本例中,使用行名称比使用数值索引更为简单。Tnew 是一个 2×5 的表。

Tnew = T({'Smith','Johnson'},:) Tnew=2×5 table Gender Smoker Height Weight ID ________ ______ ______ ______ ____ Smith {'Male'} true 71 176 8148 Johnson {'Male'} false 69 163 9058

        通过变量名称索引来选择名为 'Johnson' 的患者的身高和体重。Tnew 是一个 1×2 的表。

Tnew = T('Johnson',{'Height','Weight'}) Tnew=1×2 table Height Weight ______ ______ Johnson 69 163

        可以使用圆点语法访问表变量(如 T.Height 中所示),也可以按命名索引访问表变量(如 T(:,'Height') 中所示)。

计算结果并将其添加为表变量

        可以访问表变量的内容,然后使用 MATLAB® 函数对它们执行计算。根据现有表变量中的数据计算体质指数 (BMI),并将其添加为新变量。绘制 BMI 与患者状态为烟民或非烟民的关系图。向表中添加血压读数,并绘制血压与 BMI 的关系图。

        使用表变量Weight和Height计算 BMI。可以提取Weight和Height以进行计算,同时在包含其余患者数据的表中方便地保留 Weight、Height 和 BMI。显示 T 的前五行。

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2; T(1:5,:) ans=5×6 table Gender Smoker Height Weight ID BMI __________ ______ ______ ______ ____ ______ Smith {'Male' } true 71 176 8148 24.547 Johnson {'Male' } false 69 163 9058 24.071 Williams {'Female'} false 64 131 1270 22.486 Jones {'Female'} false 67 133 9134 20.831 Brown {'Female'} false 64 119 6324 20.426

        填充 BMI的变量单位和变量说明属性。可以将元数据添加到任何表变量中,以进一步描述该变量中包含的数据。

T.Properties.VariableUnits{'BMI'} = 'kg/m^2'; T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

        创建一个直方图以探索这组患者的吸烟与体质指数之间是否存在关系。可以使用 Smoker 表变量中的逻辑值来索引BMI,这是因为每行都包含同一患者的 BMI 和 Smoker 值。

tf = (T.Smoker == false); h1 = histogram(T.BMI(tf),'BinMethod','integers'); hold on tf = (T.Smoker == true); h2 = histogram(T.BMI(tf),'BinMethod','integers'); xlabel('BMI (kg/m^2)'); ylabel('Number of Patients'); legend('Nonsmokers','Smokers'); title('BMI Distributions for Smokers and Nonsmokers'); hold off

                                  

        从工作区变量 Systolic 和 Diastolic 中添加患者的血压读数。每一行都包含同一患者的 Systolic、Diastolic 和 BMI 值。

T.Systolic = Systolic; T.Diastolic = Diastolic;

        创建一个直方图来显示 Diastolic 和 BMI 的较高值之间是否存在关系。

tf = (T.BMI 25); h2 = histogram(T.Diastolic(tf),'BinMethod','integers'); xlabel('Diastolic Reading (mm Hg)'); ylabel('Number of Patients'); legend('BMI 25'); title('Diastolic Readings for Low and High BMI'); hold off

          如图所示:                     

                             

对表变量和输出行进行重新排序

        要准备表进行输出,请按名称重新排列该表行的顺序,并按位置或名称重新排列表变量。显示表的最终排列。

        按行名称对表进行排序,以使患者按字母顺序列出。

T = sortrows(T,'RowNames'); T(1:5,:) ans=5×8 table Gender Smoker Height Weight ID BMI Systolic Diastolic __________ ______ ______ ______ ____ ______ ________ _________ Adams {'Female'} false 66 137 8235 22.112 127 83 Alexander {'Male' } true 69 171 1300 25.252 128 99 Allen {'Female'} false 63 143 7432 25.331 113 80 Anderson {'Female'} false 68 128 1577 19.462 114 77 Bailey {'Female'} false 68 130 2239 19.766 113 81

        创建一个 BloodPressure 变量,将血压读数保存在一个 100×2 的表变量中。

T.BloodPressure = [T.Systolic T.Diastolic];

        从表中删除 Systolic 和 Diastolic,因为它们是冗余的。

T.Systolic = []; T.Diastolic = []; T(1:5,:) ans=5×7 table Gender Smoker Height Weight ID BMI BloodPressure __________ ______ ______ ______ ____ ______ _____________ Adams {'Female'} false 66 137 8235 22.112 127 83 Alexander {'Male' } true 69 171 1300 25.252 128 99 Allen {'Female'} false 63 143 7432 25.331 113 80 Anderson {'Female'} false 68 128 1577 19.462 114 77 Bailey {'Female'} false 68 130 2239 19.766 113 81

        要将 ID 作为第一列,请按位置重新排列表变量。

T = T(:,[5 1:4 6 7]); T(1:5,:) ans=5×7 table ID Gender Smoker Height Weight BMI BloodPressure ____ __________ ______ ______ ______ ______ _____________ Adams 8235 {'Female'} false 66 137 22.112 127 83 Alexander 1300 {'Male' } true 69 171 25.252 128 99 Allen 7432 {'Female'} false 63 143 25.331 113 80 Anderson 1577 {'Female'} false 68 128 19.462 114 77 Bailey 2239 {'Female'} false 68 130 19.766 113 81

        还可以按名称对表变量进行重新排序。要重新排列表变量以使 Gender 成为最后一个变量,请执行以下操作:

在该表的 VariableNames 属性中查找 'Gender'。将 'Gender' 移到变量名称元胞数组末尾。使用名称元胞数组重新排列表变量的顺序。 varnames = T.Properties.VariableNames; others = ~strcmp('Gender',varnames); varnames = [varnames(others) 'Gender']; T = T(:,varnames);

        显示经过重新排序的表的前五行。

T(1:5,:) ans=5×7 table ID Smoker Height Weight BMI BloodPressure Gender ____ ______ ______ ______ ______ _____________ __________ Adams 8235 false 66 137 22.112 127 83 {'Female'} Alexander 1300 true 69 171 25.252 128 99 {'Male' } Allen 7432 false 63 143 25.331 113 80 {'Female'} Anderson 1577 false 68 128 19.462 114 77 {'Female'} Bailey 2239 false 68 130 19.766 113 81 {'Female'} 将表写入文件

        可以将整个表写入文件,或创建一个子表来将原始表的选定部分写入一个单独的文件。

        使用 writetable 函数将 T 写入文件。

writetable(T,'allPatientsBMI.txt');

        可以使用 readtable 函数将 allPatientsBMI.txt 中的数据读入新表中。

        创建一个子表并将其写入一个单独的文件中。删除包含烟民患者数据的行。然后删除 Smoker 变量。nonsmokers 仅包含非烟民患者的数据。

nonsmokers = T; toDelete = (nonsmokers.Smoker == true); nonsmokers(toDelete,:) = []; nonsmokers.Smoker = [];

        将 nonsmokers 写入文件。

writetable(nonsmokers,'nonsmokersBMI.txt');



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3