表由若干行变量和若干列变量组成。表格中的每个变量都可以具有不同的数据类型和大小,但有一个限制条件:每个变量的行数必须相同。[大谦MATLAB,dqmatlab点com]
创建表
用table函数可以根据已有的变量创建表,也可以用readtable函数根据文件创建表。
1.根据工作区变量创建表
【例2-68】
先创建具有相同行数的工作区变量。
ID = {'1';'2';'3';'4'};
Name = {'张三';'李四';'杨二';'王五'};
Age = [18;19;17;20];
Height = [162;169;164;167];
Weight = [116;103;131;133];
然后用table函数创建表。下面用'RowNames'名称-值匹配对指定各行的名称为ID的值。
T=table(Name,Age,Height,Weight, 'RowNames',ID)
T =
Name Age Height Weight
____ ___ ______ ______
1 '张三' 18 162 116
2 '李四' 19 169 103
3 '杨二' 17 164 131
4 '王五' 20 167 133
2.创建表的内容并指定变量名称
【例2-69】
先创建表的内容,然后用'VariableNames'名称-值匹配对指定变量名。
T = table(categorical({'张三';'李四';'杨二';'王五'}),{'M';'F';'M';'F'},[18;19;17;25],...
[162;169;164;167],logical([0;0;0;1]),...
'VariableNames',{'Name' 'Gender' 'Age' 'Height' 'Married'})
T =
Name Gender Age Height Married
____ ______ ___ ______ _______
张三 'M' 18 162 false
李四 'F' 19 169 false
杨二 ' M' 17 164 false
王五 'F' 25 167 true
3.用对象引用方式创建表
【例2-70】
这种方式是先创建一个空的table对象,然后用对象引用方式逐个指定变量名称和值。
在命令窗口中输入:
ID = {'1';'2';'3';'4'};
Name = {'张三';'李四';'杨二';'王五'};
Age = [18;19;17;20];
Height = [162;169;164;167];
Weight = [116;103;131;133];
T=table;
T.ID=ID;
T.Name=Name;
T.Age=Age;
T.Height=Height;
T.Weight=Weight
T =
ID Name Age Height Weight
___ ____ ___ ______ ______
'1' '张三' 18 162 116
'2' '李四' 19 169 103
'3' '杨二' 17 164 131
'4' '王五' 20 167 133
4.用readtable函数创建表
【例2-71】
先用记事本程序创建一个包括表数据的文本文件,如图2-4所示。将文件保存在MATLAB安装目录的examples\matlab子目录下,名为demo.dat。
图2-4 包含表数据的文本文件
在命令窗口中输入:
filename = fullfile(matlabroot,'examples','matlab','demo.dat');
T=readtable(filename)
生成表:
T =
ID Name Age Height Weight
__ ____ ___ ______ ______
1 '张三' 18 162 116
2 '李四' 19 169 103
3 '杨二' 17 164 131
4 '王五' 20 167 133
使用writetable函数,可以将表写入文件中。
表的运算与关联
在MATLAB中,可以很方便地进行表的交、差、异或和并运算。
【例2-72】
创建如下两个表。
A = table(categorical({'1';'2';'3';'4'}),{'张三';'李四';'杨二';'王五'},{'M';'F';'M';'F'},[18;19;17;25],...
[162;169;164;167],logical([0;0;0;1]),...
'VariableNames',{'ID' 'Name' 'Gender' 'Age' 'Height' 'Married'})
A =
ID Name Gender Age Height Married
__ ____ ______ ___ ______ _______
1 '张三' 'M' 18 162 false
2 '李四' 'F' 19 169 false
3 '杨二' 'M' 17 164 false
4 '王五' 'F' 25 167 true
B = table(categorical({'3';'6';'8';'10'}),{'杨二';'赵旭';'东方允';'夏东'},{'M';'M';'M';'M'},[17;20;18;23],...
[164;159;162;165],logical([0;0;0;1]),...
'VariableNames',{'ID' 'Name' 'Gender' 'Age' 'Height' 'Married'})
B =
ID Name Gender Age Height Married
__ _____ ______ ___ ______ _______
3 '杨二' 'M' 17 164 false
6 '赵旭' 'M' 20 159 false
8 '东方允' 'M' 18 162 false
10 '夏东' 'M' 23 165 true
1.求两个表的交集
下面用intersect函数求两个表的交集。
C=intersect(A,B)
C =
ID Name Gender Age Height Married
__ ____ ______ ___ ______ _______
3 '杨二' 'M' 17 164 false
2.求两个表的差集
下面用setdiff函数求两个表的差集。表A和表B的差集,是从表A中删除表A和表B交集的结果。
C=setdiff(A,B)
C =
ID Name Gender Age Height Married
__ ____ ______ ___ ______ _______
1 '张三' 'M' 18 162 false
2 '李四' 'F' 19 169 false
4 '王五' 'F' 25 167 true
3.求两个表的并集
下面用union函数求两个表的并集。
C=union(A,B)
C =
ID Name Gender Age Height Married
__ _____ ______ ___ ______ _______
1 '张三' 'M' 18 162 false
2 '李四' 'F' 19 169 false
3 '杨二' 'M' 17 164 false
4 '王五' 'F' 25 167 true
10 '夏东' 'M' 23 165 true
6 '赵旭' 'M' 20 159 false
8 '东方允' 'M' 18 162 false
4.求两个表的异或
下面用setxor函数求两个表的异或。两个表的异或操作结果,是不在两个表的交集中的数据,不包括重复项。
C=setxor(A,B)
C =
ID Name Gender Age Height Married
__ _____ ______ ___ ______ _______
1 '张三' 'M' 18 162 false
2 '李四' 'F' 19 169 false
4 '王五' 'F' 25 167 true
10 '夏东' 'M' 23 165 true
6 '赵旭' 'M' 20 159 false
8 '东方允' 'M' 18 162 false
表的转换
下面用array2table函数和table2array函数实现表与数组之间的转换。
【例2-73】
对于数组A:
A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
用array2table函数将数组A转换为表。
T=array2table(A)
T =
A1 A2 A3
__ __ __
1 2 3
4 5 6
7 8 9
对于表T:
T = table([1;2;3],[2 5; 6 9; 6 10], 'VariableNames',{'One' 'Two'})
T =
One Two
___ _______
1 2 5
2 6 9
3 6 10
用table2array函数将表T转换为数组。
A=table2array(T)
A =
1 2 5
2 6 9
3 6 10
表与时间表、结构和单元数组之间的转换函数如表2-11所示。
表2-11 表与时间表、结构和单元数组之间的转换函数
| 函 数 | 说 明 |
|---|---|
| cell2table | 将单元数组转换为表 |
| struct2table | 将结构转换为表 |
续表
| 函 数 | 说 明 |
|---|---|
| table2cell | 将表转换为单元数组 |
| table2struct | 将表转换为结构 |
| timetable2table | 将时间表转换为表 |
| table2timetable | 将表转换为时间表 |