在表格和时间表操作中使用行标签
表和时间表提供了标记数据中的行的方法。在表中,可以用名称标记行。在时间表中,必须用日期、时间或两者同时标记行。对于表,行名是可选的,但对于时间表,行时间是必需的。这些行标签是表或时间表中元数据的一部分。在某些函数中,您还可以使用行标签作为关键变量、分组变量等等,就像您可以在表或时间表中使用数据变量一样。这些函数是sortrows
,加入
,innerjoin
,outerjoin
,varfun
,rowfun
,堆栈
,unstack
.在使用这些表函数和使用行标签作为关键变量方面有一些限制。
按行标签排序
例如,您可以按时间表的行时间、一个或多个数据变量排序,或者同时按行时间和数据变量排序。
方法创建时间表时间表
函数。时间表在其第一个维度上有行时间,标记行。行时间是时间表的一个属性,而不是时间表变量。
Date = datetime(2016,7,[10;10;11;11;10;10;11;11]);X = [1;1;1;1;2;2;Y = {“一个”;“b”;“一个”;“b”;“一个”;“b”;“一个”;“b”};Z = [1;2;3;4;5;6;7;8];TT =时间表(X,Y,Z,“RowTimes”、日期)
TT =8×3的时间表时间X Y Z ___________ _ _____ _ 自2016年7月10 - 1 {a} 1 10 - 7月- 2016年7月1 {b} 2 11 - 11 - 2016 1 {a} 3 - 7月- 2016年1 {b} 4 10 - 7月- 2016年2 {a} 5 10 - 7月11 - 2016 2 {b} 6 - 7月- 2016年2 {a} 7 11 - 7月- 2016年2 {b} 8
重命名第一个维度。默认情况下,时间表的第一个维度的名称为时间
.您可以访问属性。DimensionNames
属性重命名维度。
TT.Properties.DimensionNames{1} =“日期”;TT.Properties.DimensionNames
ans =1 x2单元格{‘日期’}{}“变量”
的第一个输入参数,可以指定行时间时间表
,但没有说明“RowTimes”
.的时间表
函数在第一个输入参数之后命名行时间或第一个维度,就像它在其他输入参数之后命名时间表变量一样。
时间表(日期,X,Y,Z)
TT =8×3的时间表日期X Y Z ___________ _ _____ _ 自2016年7月10 - 1 {a} 1 10 - 7月- 2016年7月1 {b} 2 11 - 11 - 2016 1 {a} 3 - 7月- 2016年1 {b} 4 10 - 7月- 2016年2 {a} 5 10 - 7月11 - 2016 2 {b} 6 - 7月- 2016年2 {a} 7 11 - 7月- 2016年2 {b} 8
按行时间对时间表进行排序。若要按行时间排序,请按名称引用时间表的第一个维度。
sortrows (TT,“日期”)
ans =8×3的时间表日期X Y Z ___________ _ _____ _ 自2016年7月10 - 1 {a} 1 10 - 7月- 2016年7月1 {b} 2 10 - 10 - 2016 2 {a} 5 - 7月- 2016年2 {b} 6自2016年7月11 - 1 {a} 3 11 - 7月11 - 2016 1 {b} 4 - 7月- 2016年2 {a} 7 11 - 7月- 2016年2 {b} 8
按数据变量排序X
而且Y
.sortrows
种类上X
首先,然后是Y
.
sortrows (TT, {“X”“Y”})
ans =8×3的时间表日期X Y Z ___________ _ _____ _ 自2016年7月10 - 1 {a} 1自2016年7月11 - 1 {a} 3 10 - 7月- 2016年7月1 {b} 2 11 - 10 - 2016 1 {b} 4 - 7月- 2016年2 {a} 5 11 - 7月- 2016年7月2 {a} 7 10 - 11 - 2016 2 {b} 6 - 7月- 2016年2 {b} 8
按行次数和排序X
在一起。
sortrows (TT, {“日期”“X”})
ans =8×3的时间表日期X Y Z ___________ _ _____ _ 自2016年7月10 - 1 {a} 1 10 - 7月- 2016年7月1 {b} 2 10 - 10 - 2016 2 {a} 5 - 7月- 2016年2 {b} 6自2016年7月11 - 1 {a} 3 11 - 7月11 - 2016 1 {b} 4 - 7月- 2016年2 {a} 7 11 - 7月- 2016年2 {b} 8
使用行标签作为分组或关键变量
属性将行分组在一起时rowfun
,varfun
,堆栈
,unstack
函数时,可以将行标签指定为分组变量。控件将表或时间表连接在一起时加入
,innerjoin
,outerjoin
函数时,可以将行标签指定为关键变量。
例如,您可以使用行名和表变量作为关键变量,一起执行两个表的内部连接。内部连接只保留那些与关键变量相匹配的表行。
创建两个病人数据表。表可以在第一个维度上有行名,标记行,但并不要求必须有行名。指定病人的姓作为表的行名。添加患者的名字作为表变量。
A = table({“迈克尔”;“路易”;“爱丽丝”;“迷迭香”;“朱莉”},[38, 43岁,45,40;49),...“VariableNames”, {“FirstName”“年龄”},...“RowNames”, {“加西亚”“约翰逊”“吴”“琼斯”“皮卡”})
一个=5×2表姓名年龄____________ ___加西亚{'迈克尔'}38约翰逊{'路易斯'}43吴{'爱丽丝'}45琼斯{'罗斯玛丽'}40皮卡德{'朱莉'}49
B = table({“迈克尔”;“贝弗利”;“爱丽丝”},...(64; 69; 67),...(119; 163; 133),...(122 80;109 77;117 75),...“VariableNames”, {“FirstName”“高度”“重量”“血压”},...“RowNames”, {“加西亚”“约翰逊”“吴”})
B =3×4表名字身高体重血压___________ ____________ _____________加西亚{'迈克尔'}64 119 122 80约翰逊{'贝弗利'}69 163 109 77吴{'爱丽丝'}67 133 117 75
如果一个表有行名,那么您可以根据行名对其建立索引。按行名进行索引是选择表中的行的一种方便方法。索引B
通过病人的姓来检索病人的信息。
B (“加西亚”:)
ans =1×4表FirstName身高体重血压 ___________ ______ ______ _____________ 加西亚{“迈克尔”}64 119 122 80
在这两个表上执行内部连接。这两个表都使用患者的姓氏作为行名,并包含名字作为表变量。两张表中有些病人的姓相同,但名不同。要确保姓和名都匹配,请使用行名和FirstName
作为关键变量。若要将行名指定为键或分组变量,请使用表的第一个维度的名称。默认情况下,第一个维度的名称为“行”
.
C = innerjoin(A,B,“钥匙”, {“行”,“FirstName”})
C =2×5表FirstName年龄身高体重血压 ___________ ___ ______ ______ _____________ 加西亚{“迈克尔”}38 64 119 122 80吴{“爱丽丝”}45 67 133 117 75
如果重命名表的第一个维度,则可以通过该名称引用行名,而不是使用“行”
.执行与上面相同的内部连接,但是使用不同的名称来引用行名。
的维度名称一个
通过访问属性。DimensionNames
财产。
A.Properties.DimensionNames
ans =1 x2单元格{'行'}{}“变量”
使用的方法更改表的第一个维度的名称属性。DimensionNames
财产。然后使用新名称作为关键变量。
A.Properties.DimensionNames{1} =“姓”;A.Properties.DimensionNames
ans =1 x2单元格{' LastName}{}“变量”
执行一个内部连接一个
而且B
使用姓
而且FirstName
作为关键变量。
B.Properties。DimensionNames {1} =“姓”;D = innerjoin(A,B,“钥匙”, {“姓”,“FirstName”})
D =2×5表FirstName年龄身高体重血压 ___________ ___ ______ ______ _____________ 加西亚{“迈克尔”}38 64 119 122 80吴{“爱丽丝”}45 67 133 117 75
表函数和行标签的使用说明
属性不能对行标签进行堆栈或解堆栈
堆栈
而且unstack
功能。但是,您可以使用行标签作为分组变量。属性不能执行连接
加入
,innerjoin
,或outerjoin
当第一个参数是表,第二个参数是时间表时,执行此函数。但是,当两个参数都是表、都是时间表,或者第一个参数是时间表,第二个参数是表时,可以执行连接。如果将行标签指定为关键变量,联接操作的输出可以具有行标签。有关连接操作中的行标签的详细信息,请参阅
“钥匙”
,“LeftKeys”
,“RightKeys”
的论点加入
,innerjoin
,outerjoin
功能。