暴走的柿子 · 打好促进实体经济发展“组合拳”--理论-中国 ...· 5 天前 · |
听话的日光灯 · 浙江卫视宣布暂停播出《中国好声音》,制作方母 ...· 2 月前 · |
怕老婆的针织衫 · 《老酒馆》三大神秘人物,王爷是骗子,而他是最幸福的· 3 月前 · |
豁达的椰子 · 将照片从iPhone传输到新iPhone的5 ...· 5 月前 · |
幸福的梨子 · INFJ - 人格森林· 8 月前 · |
使用键变量按行合并两个表或时间表
使用
键变量
合并表或时间表
T
= join(
Tleft
,
Tright
)
Tleft
和
Tright
。两个表中同名的所有变量均为键变量。当右表中存在与左表中的键变量值匹配的键变量时,则表联接操作会将右表中对应的行追加到左表。例如,如果
Tleft
具有名为
Key1
和
Var1
的变量,
Tright
具有变量
Key1
和
Var2
,则
T=join(Tleft,Tright)
使用
Key1
作为键变量。
左表和右表中键变量的匹配值不必按相同顺序排列。此外,
Tright
的键变量必须包含
Tleft
的键变量中的所有值。每个值在
Tright
的键变量中只能出现一次,但在
Tleft
的键变量中可以出现多次。
输入可以是表、时间表或其中之一。
如果
Tleft
是表,则
join
以表的形式返回
T
。
如果
Tleft
是时间表,则
join
以时间表的形式返回
T
。
Tleft
和
Tright
的行标签向量可以用作键变量。行标签是表的行名称或时间表的行时间。
联接表或时间表,并通过一个或多个
T
= join(
Tleft
,
Tright
,
Name,Value
)
Name,Value
对组参数指定其他选项。
例如,您可以指定将哪些变量用作键变量。
创建表
Tleft
。
Tleft = table({'Janice','Jonas','Javier','Jerry','Julie'}',[1;2;1;2;1],... 'VariableNames',{'Employee' 'Department'})
Tleft=5×2 table
Employee Department
__________ __________
{'Janice'} 1
{'Jonas' } 2
{'Javier'} 1
{'Jerry' } 2
{'Julie' } 1
创建与
Tleft
具有共有变量的表
Tright
。
Tright = table([1 2]',{'Mary' 'Mona'}',... 'VariableNames',{'Department' 'Manager'})
Tright=2×2 table
Department Manager
__________ ________
1 {'Mary'}
2 {'Mona'}
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。使用
join
函数,根据键变量
Department
重复表
Tright
中的
Manager
数据并将其追加到表
Tleft
的数据中。
T = join(Tleft,Tright)
T=5×3 table
Employee Department Manager
__________ __________ ________
{'Janice'} 1 {'Mary'}
{'Jonas' } 2 {'Mona'}
{'Javier'} 1 {'Mary'}
{'Jerry' } 2 {'Mona'}
{'Julie' } 1 {'Mary'}
创建表
Tleft
。
Tleft = table([5;12;23;2;6],... {'cereal';'pizza';'salmon';'cookies';'pizza'},... 'VariableNames',{'Age','FavoriteFood'},... 'RowNames',{'Amy','Bobby','Holly','Harry','Sally'})
Tleft=5×2 table
Age FavoriteFood
___ ____________
Amy 5 {'cereal' }
Bobby 12 {'pizza' }
Holly 23 {'salmon' }
Harry 2 {'cookies'}
Sally 6 {'pizza' }
创建与
Tleft
具有一个共有变量的表
Tright
。
Tright = table({'cereal';'cookies';'pizza';'salmon';'cake'},... [110;160;140;367;243],... {'B';'D';'B-';'A';'C-'},... 'VariableNames',{'FavoriteFood','Calories','NutritionGrade'})
Tright=5×3 table
FavoriteFood Calories NutritionGrade
____________ ________ ______________
{'cereal' } 110 {'B' }
{'cookies'} 160 {'D' }
{'pizza' } 140 {'B-'}
{'salmon' } 367 {'A' }
{'cake' } 243 {'C-'}
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。共同的变量
FavoriteFood
用作
join
函数的键变量。
T = join(Tleft,Tright)
T=5×4 table
Age FavoriteFood Calories NutritionGrade
___ ____________ ________ ______________
Amy 5 {'cereal' } 110 {'B' }
Bobby 12 {'pizza' } 140 {'B-'}
Holly 23 {'salmon' } 367 {'A' }
Harry 2 {'cookies'} 160 {'D' }
Sally 6 {'pizza' } 140 {'B-'}
表
T
不包含表
Tright
最后一行有关
'cake'
的信息,因为表
Tleft
中没有对应的项。
创建表
Tleft
。
Tleft = table([10;4;2;3;7],[5;4;9;6;1],[10;3;8;8;4])
Tleft=5×3 table
Var1 Var2 Var3
____ ____ ____
10 5 10
4 4 3
2 9 8
3 6 8
7 1 4
创建表
Tright
,使表
Tright
中
Var2
的内容与表
Tleft
中
Var2
的内容相同。
Tright = table([6;1;1;6;8],[5;4;9;6;1])
Tright=5×2 table
Var1 Var2
____ ____
6 5
1 4
1 9
6 6
8 1
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。使用表
Tleft
和
Tright
中的
Var2
作为
join
函数的键变量。
T = join(Tleft,Tright,'Keys','Var2')
T=5×4 table
Var1_Tleft Var2 Var3 Var1_Tright
__________ ____ ____ ___________
10 5 10 6
4 4 3 1
2 9 8 1
3 6 8 6
7 1 4 8
join
为非键变量
Var1
添加一个唯一的后缀,以区分表
Tleft
和
Tright
中的数据。
创建一个新表,其中包含表
Tleft
和
Tright
的数据。如果两个表中有任何同名的非键变量,仅保留其在表
Tleft
中的副本。
创建表
Tleft
。
Tleft = table([10;4;2;3;7],[5;4;9;6;1])
Tleft=5×2 table
Var1 Var2
____ ____
10 5
4 4
2 9
3 6
7 1
创建表
Tright
,使表
Tright
中
Var2
的内容与表
Tleft
中
Var2
的内容相同。
Tright = table([6;1;1;6;8],[5;4;9;6;1],[10;3;8;8;4])
Tright=5×3 table
Var1 Var2 Var3
____ ____ ____
6 5 10
1 4 3
1 9 8
6 6 8
8 1 4
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。使用
Var2
作为
join
函数的键变量,并且仅保留表
Tleft
中
Var1
的副本。
T
的输出表不包含表
Tright
中的
Var1
数据。
T = join(Tleft,Tright,'Keys','Var2','KeepOneCopy','Var1')
T=5×3 table
Var1 Var2 Var3
____ ____ ____
10 5 10
4 4 3
2 9 8
3 6 8
7 1 4
创建表
Tleft
。
Tleft = table(['M';'M';'F';'F';'F'],[38;43;38;40;49],... 'VariableNames',{'Gender' 'Age'},... 'RowNames',{'Smith' 'Johnson' 'Williams' 'Jones' 'Brown'})
Tleft=5×2 table
Gender Age
______ ___
Smith M 38
Johnson M 43
Williams F 38
Jones F 40
Brown F 49
创建表
Tright
,使
Tleft
和
Tright
的行一一对应。
Tright = table([64;69;67;71;64],... [119;163;133;176;131],... [122 80; 109 77; 117 75; 124 93; 125 83],... 'VariableNames',{'Height' 'Weight' 'BloodPressure'},... 'RowNames',{'Brown' 'Johnson' 'Jones' 'Smith' 'Williams'})
Tright=5×3 table
Height Weight BloodPressure
______ ______ _____________
Brown 64 119 122 80
Johnson 69 163 109 77
Jones 67 133 117 75
Smith 71 176 124 93
Williams 64 131 125 83
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。使用行名称向量作为键变量。(表行名称向量的名称是
'Row'
,如
Tleft.Properties.DimensionNames{1}
所示。)
T = join(Tleft,Tright,'Keys','Row')
T=5×5 table
Gender Age Height Weight BloodPressure
______ ___ ______ ______ _____________
Smith M 38 71 176 124 93
Johnson M 43 69 163 109 77
Williams F 38 64 131 125 83
Jones F 40 67 133 117 75
Brown F 49 64 119 122 80
T
中行的顺序与
Tleft
相同。
创建表
Tleft
。
Tleft = table([10;4;2;3;7],[5;4;9;6;1],[10;3;8;8;4])
Tleft=5×3 table
Var1 Var2 Var3
____ ____ ____
10 5 10
4 4 3
2 9 8
3 6 8
7 1 4
创建表
Tright
,使表
Tright
中
Var2
的内容与表
Tleft
中
Var1
的内容相同,但顺序不同。
Tright = table([6;1;1;6;8],[2;3;4;7;10])
Tright=5×2 table
Var1 Var2
____ ____
6 2
1 3
1 4
6 7
8 10
创建新表
T
,其中包含表
Tleft
和
Tright
的数据。使用表
Tleft
中的
Var1
和表
Tright
中的
Var2
作为
join
函数的键变量。
[T,iright] = join(Tleft,Tright,'LeftKeys',1,'RightKeys',2)
T=5×4 table
Var1_Tleft Var2 Var3 Var1_Tright
__________ ____ ____ ___________
10 5 10 8
4 4 3 1
2 9 8 6
3 6 8 1
7 1 4 6
iright = 5×1
T
是
Tleft
和
Tright(iright,1)
的水平串联。
创建两个时间表,它们的行时间相同,但变量不同。
Traffic = [0.8 0.9 0.1 0.7 0.9]'; Noise = [0 1 1.5 2 2.3]'; Tleft = timetable(hours(1:5)',Traffic,Noise)
Tleft=5×2 timetable
Time Traffic Noise
____ _______ _____
1 hr 0.8 0
2 hr 0.9 1
3 hr 0.1 1.5
4 hr 0.7 2
5 hr 0.9 2.3
Distance = [0.88 0.86 0.91 0.9 0.86]'; Tright = timetable(hours(1:5)',Distance)
Tright=5×1 timetable
Time Distance
____ ________
1 hr 0.88
2 hr 0.86
3 hr 0.91
4 hr 0.9
5 hr 0.86
合并两个时间表。
join
使用行时间作为键变量。
T = join(Tleft,Tright)
T=5×3 timetable
Time Traffic Noise Distance
____ _______ _____ ________
1 hr 0.8 0 0.88
2 hr 0.9 1 0.86
3 hr 0.1 1.5 0.91
4 hr 0.7 2 0.9
5 hr 0.9 2.3 0.86
创建一个时间表和一个表。
Measurements = [0.13 0.22 0.31 0.42 0.53 0.57 0.67 0.81 0.90 1.00]'; Device = ['A';'B';'A';'B';'A';'B';'A';'B';'A';'B']; Tleft = timetable(seconds(1:10)',Measurements,Device)
Tleft=10×2 timetable
Time Measurements Device
______ ____________ ______
1 sec 0.13 A
2 sec 0.22 B
3 sec 0.31 A
4 sec 0.42 B
5 sec 0.53 A
6 sec 0.57 B
7 sec 0.67 A
8 sec 0.81 B
9 sec 0.9 A
10 sec 1 B
Device = ['A';'B']; Accuracy = [0.023;0.037]; Tright = table(Device,Accuracy)
Tright=2×2 table
Device Accuracy
______ ________
A 0.023
B 0.037
合并时间表和表。
Device
是键变量,因为
Tleft
和
Tright
中都存在具有该名称的变量。
T
是一个时间表。
T = join(Tleft,Tright)
T=10×3 timetable
Time Measurements Device Accuracy
______ ____________ ______ ________
1 sec 0.13 A 0.023
2 sec 0.22 B 0.037
3 sec 0.31 A 0.023
4 sec 0.42 B 0.037
5 sec 0.53 A 0.023
6 sec 0.57 B 0.037
7 sec 0.67 A 0.023
8 sec 0.81 B 0.037
9 sec 0.9 A 0.023
10 sec 1 B 0.037
Tleft
—
左表
左表,指定为表或时间表。对于所有键变量,
Tleft
的每一行都必须与
Tright
中的一行完全匹配。
Tright
—
右表
右表,指定为表或时间表。对于所有键变量,
Tright
的每一行都必须与
Tleft
中的一行完全匹配。
将可选的参数对组指定为
Name1=Value1,...,NameN=ValueN
,其中
Name
是参数名称,
Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将
Name
引起来。
示例:
'Keys',2
使用
Tleft
中的第二个变量和
Tright
中的第二个变量作为键变量。
Keys
—
用作键值的变量
pattern
标量
|
逻辑向量
用作键值的变量,指定为逗号分隔的对组,包含
'Keys'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、
pattern
标量或逻辑向量。
您不能将
'Keys'
名称-值对组参数与
'LeftKeys'
和
'RightKeys'
名称-值对组参数配合使用。
来自输入表或时间表的行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为
'Row'
(如果是表的行名称)、行时间的时间表向量的名称,或者
的值,其中
T
.Properties.DimensionNames{1}
是表或时间表。
T
为了实现向后兼容,当
Tleft
和
Tright
是具有行名称的表时,您也可以将
'Keys'
的值指定为
'RowNames'
。但是,最佳做法是将
'Keys'
的值指定为行名称向量的名称。
示例:
'Keys',[1 3]
使用
Tleft
和
Tright
的第一个和第三个变量作为键变量。
示例:
'Keys',{'X','Y'}
使用
Tleft
和
Tright
中名为
X
和
Y
的变量作为键变量。
示例:
如果
Tleft
和
Tright
均为具有行名称的表,则
'Keys','Row'
使用
Tleft
和
Tright
的行名称向量作为键变量。
LeftKeys
—
Tleft
中要用作键变量的变量
pattern
标量
|
逻辑向量
用作
Tleft
中的键值的变量,指定为逗号分隔的对组,包含
'LeftKeys'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、
pattern
标量或逻辑向量。
必须将
'LeftKeys'
名称-值对组参数与
'RightKeys'
名称-值对组参数结合使用。
'LeftKeys'
和
'RightKeys'
必须指定相同数量的键变量。
join
根据键值的顺序为
Tleft
和
Tright
中的键值配对。
来自输入表或时间表的行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为
'Row'
(如果是表的行名称)、行时间的时间表向量的名称,或者
的值,其中
T
.Properties.DimensionNames{1}
是表或时间表。
T
示例:
'LeftKeys',1
仅使用
Tleft
中的第一个变量作为键变量。
RightKeys
—
Tright
中要用作键变量的变量
pattern
标量
|
逻辑向量
用作
Tright
中的键值的变量,指定为逗号分隔的对组,包含
'RightKeys'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、
pattern
标量或逻辑向量。
必须将
'RightKeys'
名称-值对组参数与
'LeftKeys'
名称-值对组参数结合使用。
'LeftKeys'
和
'RightKeys'
必须指定相同数量的键变量。
join
根据键值的顺序为
Tleft
和
Tright
中的键值配对。
来自输入表或时间表的行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为
'Row'
(如果是表的行名称)、行时间的时间表向量的名称,或者
的值,其中
T
.Properties.DimensionNames{1}
是表或时间表。
T
示例:
'RightKeys',3
仅使用
Tright
中的第三个变量作为键变量。
LeftVariables
—
要包含在
T
中的来自
Tleft
的变量
pattern
标量
|
逻辑向量
要包含在
T
中的来自
Tleft
的变量,指定为逗号分隔的对组,包含
'LeftVariables'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、
pattern
标量或逻辑向量。
可以使用
'LeftVariables'
在
T
中包含或排除键变量和非键变量。但是,您不能包含
Tleft
中的行名称或行时间,因为它们不是变量。
默认情况下,
join
包含来自
Tleft
的所有变量。
RightVariables
—
要包含在
T
中的来自
Tright
的变量
pattern
标量
|
逻辑向量
要包含在
T
中的来自
Tright
的变量,指定为逗号分隔的对组,包含
'RightVariables'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、
pattern
标量或逻辑向量。
可以使用
'RightVariables'
在
T
中包含或排除键变量和非键变量。但是,您不能包含
Tright
中的行名称或行时间,因为它们不是变量。
默认情况下,
join
包含
Tright
中除键变量以外的所有变量。
KeepOneCopy
—
join
仅保留其在
Tleft
中的副本的变量
pattern
标量
join
仅保留其在
Tleft
中的副本的变量,指定为逗号分隔的对组,其中包含
'KeepOneCopy'
和一个用于指定变量名称的字符串数组、字符向量、字符向量元胞数组或
pattern
标量。
键变量在
T
中只出现一次,但如果
Tleft
和
Tright
中包含同名的非键变量,则
join
默认情况下会在
T
中同时保留两者的副本。可以使用
'KeepOneCopy'
名称-值对组只保留
Tleft
中的副本。
示例:
'KeepOneCopy',Var2
仅保留
Tleft
中非键变量
Var2
的副本。
T
—
Tleft
和
Tright
的合并数据
Tleft
和
Tright
的合并数据,以表或时间表形式返回。表
T
包含
Tleft
中的所有行,且显示顺序也相同。
join
通过水平串联
Tleft(:,LeftVars)
和
Tright(iright,RightVars)
来创建
T
。默认情况下,
LeftVars
为
Tleft
的所有变量,
RightVars
为
Tright
的所有非键变量。否则,
LeftVars
包含
'LeftVariables'
名称-值对组参数所指定的变量,
RightVars
包含
'RightVariables'
名称-值对组参数所指定的变量。
如果
Tleft
和
Tright
包含同名的非键变量,
join
会在
T
中为对应的变量名称添加唯一性后缀,除非您指定了
'KeepOneCopy'
名称-值对组参数。
如果
Tleft
是表,则
T
也是表。如果
Tleft
是时间表,而
Tright
是时间表或表,则
T
是时间表。
您可以在
T
中存储描述、变量单位、变量名称和行名称等附加元数据。有关详细信息,请参阅
table
或
timetable
的“属性”部分。
iright
—
Tright
的索引
Tright
的索引,以列向量形式返回。
iright
的每个元素标识
Tright
中与输出表或时间表
T
中的行对应的行。
join
函数首先查找一个或多个键变量。然后,
join
使用键变量查找输入表
Tright
中与输入表
Tleft
中每一行匹配的行,并且合并这些行,以在输出表
T
中创建相应行。
如果
Tleft
和
Tright
中的键值之间存在一对一映射关系,
join
会对
Tright
中的数据排序,并将其追加至表
Tleft
。
如果
Tleft
和
Tright
中的键值之间存在多对一映射关系,
join
会对
Tright
中的数据进行排序和复写操作,然后再将其追加至表
Tleft
。
如果
Tright
的某个键变量中的数据与
Tleft
中的键值无映射关系,则
join
不会将该数据包含在输出表
T
中。
用法说明和限制:
要合并 tall 时间表和 tall 表,时间表必须是
join
的第一项输入。
以下名称-值参数的值不支持模式表达式:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
'KeepOneCopy'
有关详细信息,请参阅 tall 数组 。
用法说明和限制:
通常,输入表不能有同名的非键变量。但是,如果指定名称-值参数,则可以联接输入表的子集:
'KeepOneCopy'
,仅列出要从左侧输入表中获取的变量。
'LeftVariables'
和
'RightVariables'
,列出要从左侧输入表或右侧输入表(但不能同时包含两者)中获取的变量。
这些名称-值参数的值必须为常量:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
'KeepOneCopy'
以下名称-值参数的值不支持模式表达式:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
'KeepOneCopy'
不支持嵌套的表和时间表。
backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™
ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅 在基于线程的环境中运行 MATLAB 函数 。
在 R2013b 中推出