添加、删除和重新排列表变量
此示例说明如何在表中添加、删除和重新排列列向变量。您可以使用 addvars
、movevars
和 removevars
函数添加、移动和删除表变量。作为备选方法,您还可以使用圆点语法或对表进行索引来修改表变量。使用 splitvars
和 mergevars
函数可以拆分多列变量和将多个变量合并为一个变量。最后,可以使用 rows2vars
函数调整表的方向,使表的行成为输出表的变量。
您也可以使用变量编辑器修改表变量。
加载样本数据并创建表
从 patients
MAT 文件加载样本数据数组。显示加载到工作区中的变量的名称和大小。
load patients whos -file patients
Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 13012 cell Height 100x1 800 double LastName 100x1 13216 cell Location 100x1 15808 cell SelfAssessedHealthStatus 100x1 13140 cell Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double
创建两个表。用通过患者问卷收集来的信息创建一个表 T
,再用测量患者得来的数据创建另一个表 T2
。每个表有 100 行。
T = table(Age,SelfAssessedHealthStatus,Smoker); T.SelfAssessedHealthStatus = string(T.SelfAssessedHealthStatus); T2 = table(Height,Weight,Systolic,Diastolic);
显示每个表的前五行。
head(T,5)
Age SelfAssessedHealthStatus Smoker ___ ________________________ ______ 38 "Excellent" true 43 "Fair" false 38 "Good" false 40 "Fair" false 49 "Good" false
head(T2,5)
Height Weight Systolic Diastolic ______ ______ ________ _________ 71 176 124 93 69 163 109 77 64 131 125 83 67 133 117 75 64 119 122 80
串联添加来自另一个表的变量
通过将表 T
与 T2
水平串联来向前者添加变量。
T = [T T2];
显示 T
的前五行。
head(T,5)
Age SelfAssessedHealthStatus Smoker Height Weight Systolic Diastolic ___ ________________________ ______ ______ ______ ________ _________ 38 "Excellent" true 71 176 124 93 43 "Fair" false 69 163 109 77 38 "Good" false 64 131 125 83 40 "Fair" false 67 133 117 75 49 "Good" false 64 119 122 80
表 T
现在包含 7 个变量和 100 行。
如果您要以水平方式串联的表具有行名称,则 horzcat
将通过匹配行名称来串联表。因此,这些表必须使用相同的行名称,但列顺序无关紧要。
将变量从工作区添加到表中
将来自工作区变量 LastName
的患者姓名添加到 T
中的第一个表变量之前。您可以使用新位置附近的变量的名称在表中指定任何位置。使用引号来引用表变量的名称。但是,如果输入参量是工作区变量,则不要对其使用引号。
T = addvars(T,LastName,'Before',"Age"); T.LastName = string(T.LastName); head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight Systolic Diastolic __________ ___ ________________________ ______ ______ ______ ________ _________ "Smith" 38 "Excellent" true 71 176 124 93 "Johnson" 43 "Fair" false 69 163 109 77 "Williams" 38 "Good" false 64 131 125 83 "Jones" 40 "Fair" false 67 133 117 75 "Brown" 49 "Good" false 64 119 122 80
您还可以使用数字指定表中的位置。例如,使用数字指定位置时,上述命令的等效语法为 T = addvars(T,LastName,'Before',1)
。
使用圆点语法添加变量
添加新的表变量的另一种方法是使用圆点语法。当您使用圆点语法时,新变量始终添加为最后一个表变量。无论变量是什么数据类型,只要行数与表相同,就可以添加到表。
通过水平串联两个变量 Systolic
和 Diastolic
来创建一个针对血压的新变量。将它添加到 T
。
T.BloodPressure = [Systolic Diastolic]; head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight Systolic Diastolic BloodPressure __________ ___ ________________________ ______ ______ ______ ________ _________ _____________ "Smith" 38 "Excellent" true 71 176 124 93 124 93 "Johnson" 43 "Fair" false 69 163 109 77 109 77 "Williams" 38 "Good" false 64 131 125 83 125 83 "Jones" 40 "Fair" false 67 133 117 75 117 75 "Brown" 49 "Good" false 64 119 122 80 122 80
T
现在包含 9 个变量和 100 行。一个表变量可以有多个列。因此,虽然 BloodPressure
有两列,但它是一个表变量。
将一个新变量 BMI
添加到表 T
中,该表包含每位患者的体重指数。BMI
是一个关于身高和体重的函数。当您计算 BMI
时,您可以引用 T
中的 Weight
和 Height
变量。
T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;
计算 BMI
时使用的运算符 ./
和 .^
分别表示逐元素除法和乘方。
显示表 T
的前五行。
head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight Systolic Diastolic BloodPressure BMI __________ ___ ________________________ ______ ______ ______ ________ _________ _____________ ______ "Smith" 38 "Excellent" true 71 176 124 93 124 93 24.547 "Johnson" 43 "Fair" false 69 163 109 77 109 77 24.071 "Williams" 38 "Good" false 64 131 125 83 125 83 22.486 "Jones" 40 "Fair" false 67 133 117 75 117 75 20.831 "Brown" 49 "Good" false 64 119 122 80 122 80 20.426
在表中移动变量
使用 movevars
函数移动表变量 BMI
,使其位于变量 Weight
之后。当按名称指定表变量时,请使用引号。
T = movevars(T,"BMI",'After',"Weight"); head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight BMI Systolic Diastolic BloodPressure __________ ___ ________________________ ______ ______ ______ ______ ________ _________ _____________ "Smith" 38 "Excellent" true 71 176 24.547 124 93 124 93 "Johnson" 43 "Fair" false 69 163 24.071 109 77 109 77 "Williams" 38 "Good" false 64 131 22.486 125 83 125 83 "Jones" 40 "Fair" false 67 133 20.831 117 75 117 75 "Brown" 49 "Good" false 64 119 20.426 122 80 122 80
您还可以使用数字指定表中的位置。例如,使用数字指定位置时,上述命令的等效语法为 T = movevars(T,"BMI",'After',6)
。按名称引用变量通常更方便。
使用索引移动表变量
除上述方法外,您还可以通过索引来移动表变量。您可以对表进行索引,使用的语法与对矩阵进行索引相同。
将 BloodPressure
移动到 BMI
之后。
T = T(:,[1:7 10 8 9]); head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight BMI BloodPressure Systolic Diastolic __________ ___ ________________________ ______ ______ ______ ______ _____________ ________ _________ "Smith" 38 "Excellent" true 71 176 24.547 124 93 124 93 "Johnson" 43 "Fair" false 69 163 24.071 109 77 109 77 "Williams" 38 "Good" false 64 131 22.486 125 83 125 83 "Jones" 40 "Fair" false 67 133 20.831 117 75 117 75 "Brown" 49 "Good" false 64 119 20.426 122 80 122 80
在包含多个变量的表中,使用 movevars
函数通常更方便。
删除变量
要删除表变量,请使用 removevars
函数。删除 Systolic
和 Diastolic
表变量。
T = removevars(T,["Systolic","Diastolic"]); head(T,5)
LastName Age SelfAssessedHealthStatus Smoker Height Weight BMI BloodPressure __________ ___ ________________________ ______ ______ ______ ______ _____________ "Smith" 38 "Excellent" true 71 176 24.547 124 93 "Johnson" 43 "Fair" false 69 163 24.071 109 77 "Williams" 38 "Good" false 64 131 22.486 125 83 "Jones" 40 "Fair" false 67 133 20.831 117 75 "Brown" 49 "Good" false 64 119 20.426 122 80
使用圆点语法删除变量
您也可以使用圆点语法和空矩阵 []
删除变量。从表中删除 Age
变量。
T.Age = []; head(T,5)
LastName SelfAssessedHealthStatus Smoker Height Weight BMI BloodPressure __________ ________________________ ______ ______ ______ ______ _____________ "Smith" "Excellent" true 71 176 24.547 124 93 "Johnson" "Fair" false 69 163 24.071 109 77 "Williams" "Good" false 64 131 22.486 125 83 "Jones" "Fair" false 67 133 20.831 117 75 "Brown" "Good" false 64 119 20.426 122 80
使用索引删除变量
您还可以使用索引和空矩阵 []
删除变量。从表中删除 SelfAssessedHealthStatus
变量。
T(:,"SelfAssessedHealthStatus") = [];
head(T,5)
LastName Smoker Height Weight BMI BloodPressure __________ ______ ______ ______ ______ _____________ "Smith" true 71 176 24.547 124 93 "Johnson" false 69 163 24.071 109 77 "Williams" false 64 131 22.486 125 83 "Jones" false 67 133 20.831 117 75 "Brown" false 64 119 20.426 122 80
拆分和合并表变量
要将多列表变量拆分为多个单列变量,请使用 splitvars
函数。将变量 BloodPressure
拆分为两个变量。
T = splitvars(T,"BloodPressure",'NewVariableNames',["Systolic","Diastolic"]); head(T,5)
LastName Smoker Height Weight BMI Systolic Diastolic __________ ______ ______ ______ ______ ________ _________ "Smith" true 71 176 24.547 124 93 "Johnson" false 69 163 24.071 109 77 "Williams" false 64 131 22.486 125 83 "Jones" false 67 133 20.831 117 75 "Brown" false 64 119 20.426 122 80
同样,您可以使用 mergevars
函数将多个相关的表变量组合在一个变量中。将 Systolic
和 Diastolic
重新组合为一个变量,并将其命名为 BP
。
T = mergevars(T,["Systolic","Diastolic"],'NewVariableName',"BP"); head(T,5)
LastName Smoker Height Weight BMI BP __________ ______ ______ ______ ______ __________ "Smith" true 71 176 24.547 124 93 "Johnson" false 69 163 24.071 109 77 "Williams" false 64 131 22.486 125 83 "Jones" false 67 133 20.831 117 75 "Brown" false 64 119 20.426 122 80
调整行的方向使其变为变量
您可以使用 rows2vars
函数调整表或时间表中行的方向,使它们成为输出表中的变量。但是,如果该表具有多列变量,则必须先拆分它们,才能调用 rows2vars
。
对 T
的行调整方向。指定 T
中患者的姓名是输出表中表变量的名称。T3
的第一个变量包含 T
的变量的名称。T3
的其余每个变量都包含来自 T
对应行的数据。
T = splitvars(T,"BP",'NewVariableNames',["Systolic","Diastolic"]); T3 = rows2vars(T,'VariableNamesSource',"LastName"); T3(:,1:5)
ans=6×5 table
OriginalVariableNames Smith Johnson Williams Jones
_____________________ ______ _______ ________ ______
{'Smoker' } 1 0 0 0
{'Height' } 71 69 64 67
{'Weight' } 176 163 131 133
{'BMI' } 24.547 24.071 22.486 20.831
{'Systolic' } 124 109 125 117
{'Diastolic'} 93 77 83 75
您可以对 T3
使用圆点语法,以数组形式访问患者数据。但是,如果输入表的行值不能串联,则输出表的变量是元胞数组。
T3.Smith
ans = 6×1
1.0000
71.0000
176.0000
24.5467
124.0000
93.0000
另请参阅
table
| addvars
| movevars
| removevars
| splitvars
| mergevars
| inner2outer
| rows2vars