创建并查看表
将 100 位患者的样本数据从 patients MAT 文件加载到工作区变量中。
load patients
whos
Name Size Bytes Class Attributes
Age 100×1 800 double
Diastolic 100×1 800 double
Gender 100×1 11412 cell
Height 100×1 800 double
LastName 100×1 11616 cell
Location 100×1 14208 cell
SelfAssessedHealthStatus 100×1 11540 cell
Smoker 100×1 100 logical
Systolic 100×1 800 double
Weight 100×1 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: 100×1 cell array of character vectors
Smoker: 100×1 logical
Values:
True 34
False 66
Height: 100×1 double
Values:
Min 60
Median 67
Max 72
Weight: 100×1 double
Values:
Min 111
Median 142.5
Max 202
ID: 100×1 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
对表变量和输出行进行重新排序
要准备表进行输出,请按名称重新排列该表行的顺序,并按位置或名称重新排列表变量。显示表的最终排列。
按行名称对表进行排序,以使患者按字母顺序列出。
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’);
相关资源:MinionProfitsTracker:随着市场价格波动,轻松识别最赚钱的奴才[在…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!