innerjoin
两个表或时间表之间的内联
语法
说明
使用键变量对 T
= innerjoin(Tleft
,Tright
)Tleft
和 Tright
进行内联,从而创建表或时间表 T
。内联会组合那些键变量具有匹配值的行。例如,如果 Tleft
具有名为 Key1
和 Var1
的变量,Tright
具有变量 Key1
和 Var2
,则 T=innerjoin(Tleft,Tright)
使用 Key1
作为键变量。
默认情况下,键变量是:
在
Tleft
和Tright
中具有相同名称的变量,如果两个输入均为表,或如果Tleft
是时间表而Tright
是表。行时间的向量,如果
Tleft
和Tright
均为时间表。
左表和右表中键变量的匹配值不必按相同顺序排列。内联可以在两个表的键变量之间执行一对多和多对一匹配。也就是说,在左表的键变量中出现一次的值在右表中可能有多个匹配项。同样,在右表的键变量中出现一次的值在左表中也可能有多个匹配项。
您只能对某些表和时间表组合执行内联。
如果
Tleft
是表,则Tright
必须是表。innerjoin
以表的形式返回T
。如果
Tleft
是时间表,则Tright
可以是表,也可以是时间表。innerjoin
以时间表的形式为两种输入组合返回T
。
通过一个或多个 T
= innerjoin(Tleft
,Tright
,Name,Value
)Name,Value
对组参量指定的其他选项执行内联运算。
例如,您可以指定要用作键变量的变量。
示例
带一个共有变量的表的内联运算
创建表 Tleft
。
Tleft = table([5;12;23;2;6],... {'cereal';'pizza';'salmon';'cookies';'pizza'},... 'VariableNames',{'Age','FavoriteFood'})
Tleft=5×2 table
Age FavoriteFood
___ ____________
5 {'cereal' }
12 {'pizza' }
23 {'salmon' }
2 {'cookies'}
6 {'pizza' }
创建与 Tleft
具有一个共有变量的表 Tright
。
Tright = table({'cereal';'cookies';'pizza';'salmon';'cake'},... [110;160;140;367;243],... {'A-';'D';'B';'B';'C-'},... 'VariableNames',{'FavoriteFood','Calories','NutritionGrade'})
Tright=5×3 table
FavoriteFood Calories NutritionGrade
____________ ________ ______________
{'cereal' } 110 {'A-'}
{'cookies'} 160 {'D' }
{'pizza' } 140 {'B' }
{'salmon' } 367 {'B' }
{'cake' } 243 {'C-'}
使用 innerjoin
函数创建新表 T
,其数据来自表 Tleft
和 Tright
。
T = innerjoin(Tleft,Tright)
T=5×4 table
Age FavoriteFood Calories NutritionGrade
___ ____________ ________ ______________
5 {'cereal' } 110 {'A-'}
2 {'cookies'} 160 {'D' }
12 {'pizza' } 140 {'B' }
6 {'pizza' } 140 {'B' }
23 {'salmon' } 367 {'B' }
表 T
按键变量 FavoriteFood
排序。
表和值索引的内联运算
创建表 Tleft
。
Tleft = table({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',... 'VariableNames',{'Key1' 'Var1'})
Tleft=5×2 table
Key1 Var1
_____ ____
{'a'} 1
{'b'} 2
{'c'} 3
{'e'} 11
{'h'} 17
创建表 Tright
,使变量 Key1
包含表 Tleft
和 Tright
的共同值,但同时也包含带有 Tleft
中不具备的 Key1
值的行。
Tright = table({'a' 'b' 'd' 'e'}',[4 5 6 7]',... 'VariableNames',{'Key1' 'Var2'})
Tright=4×2 table
Key1 Var2
_____ ____
{'a'} 4
{'b'} 5
{'d'} 6
{'e'} 7
使用 innerjoin
函数创建新表 T
,其数据来自表 Tleft
和 Tright
。仅保留与变量 Key1
中的值相匹配的行。
还返回索引向量 ileft
和 iright
,以分别指出 T
中的行与 Tleft
和 Tright
中的行之间的对应项。
[T,ileft,iright] = innerjoin(Tleft,Tright)
T=3×3 table
Key1 Var1 Var2
_____ ____ ____
{'a'} 1 4
{'b'} 2 5
{'e'} 11 7
ileft = 3×1
1
2
4
iright = 3×1
1
2
4
表 T
按键变量 Key1
内的值来排序,并且包含 Tleft(ileft,:)
和 Tright(iright,'Var2')
的水平串联。
使用左键和右键的表的内联运算
创建表 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
,并使表 Tleft
的第一个变量用作其在第二个变量内具有的共有值。
Tright = table([6;1;1;6;8],[2;3;4;5;6])
Tright=5×2 table
Var1 Var2
____ ____
6 2
1 3
1 4
6 5
8 6
使用 innerjoin
函数创建新表 T
,其数据来自表 Tleft
和 Tright
。将 Tleft
的第一个变量和 Tright
的第二个变量用作键变量。
[T,ileft,iright] = innerjoin(Tleft,Tright,'LeftKeys',1,'RightKeys',2)
T=3×4 table
Var1_Tleft Var2 Var3 Var1_Tright
__________ ____ ____ ___________
2 9 8 6
3 6 8 1
4 4 3 1
ileft = 3×1
3
4
2
iright = 3×1
1
2
3
表 T
仅保留与 Tleft
和 Tright
之间对应键变量相匹配的行。
表 T
包含 Tleft(ileft,:)
和 Tright(iright,'Var1')
的水平串联。
时间表的内联操作
创建两个时间表 Tleft
和 Tright
。它们有一些相同的行时间,但还有一些对方所没有的行时间。
Tleft = timetable(seconds([1;2;4;6]),[1 2 3 11]')
Tleft=4×1 timetable
Time Var1
_____ ____
1 sec 1
2 sec 2
4 sec 3
6 sec 11
Tright = timetable(seconds([2;4;6;7]),[4 5 6 7]')
Tright=4×1 timetable
Time Var1
_____ ____
2 sec 4
4 sec 5
6 sec 6
7 sec 7
通过内联合并 Tleft
和 Tright
。T
匹配具有相同行时间的行。T
不包含任一时间表中的其他任何行。
T = innerjoin(Tleft,Tright)
T=3×2 timetable
Time Var1_Tleft Var1_Tright
_____ __________ ___________
2 sec 2 4
4 sec 3 5
6 sec 11 6
输入参数
Tleft
— 左表
表 | 时间表
左表,指定为表或时间表。
Tright
— 右表
表 | 时间表
右表,指定为表或时间表。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'Keys',2
使用 Tleft
中的第二个变量和 Tright
中的第二个变量作为键变量。
Keys
— 用作键值的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
用作键值的变量,指定为逗号分隔的对组,包含 'Keys'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern
标量或逻辑向量。
您不能将 'Keys'
名称-值对组参量与 'LeftKeys'
和 'RightKeys'
名称-值对组参量配合使用。
行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。有关详细信息,请参阅算法部分。
示例: 'Keys',[1 3]
使用 Tleft
和 Tright
中的第一和第三个变量作为键变量。
示例: 'Keys',{'X','Y'}
使用 Tleft
和 Tright
中名为 X
和 Y
的变量作为键变量。
示例: 如果 Tleft
和 Tright
均为具有行名称的表,则 'Keys','Row'
使用 Tleft
和 Tright
的行名称向量作为键变量。
LeftKeys
— Tleft
中要用作键变量的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
RightKeys
— Tright
中要用作键变量的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
LeftVariables
— 要包含在 T
中的来自 Tleft
的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
要包含在 T
中的来自 Tleft
的变量,指定为逗号分隔的对组,包含 'LeftVariables'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern
标量或逻辑向量。
可以使用 'LeftVariables'
在输出 T
中包含或排除键变量和非键变量。
默认情况下,innerjoin
包含来自 Tleft
的所有变量。
RightVariables
— 要包含在 T
中的来自 Tright
的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
要包含在 T
中的来自 Tright
的变量,指定为逗号分隔的对组,包含 'RightVariables'
和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern
标量或逻辑向量。
可以使用 'RightVariables'
在输出 T
中包含或排除键变量和非键变量。
默认情况下,innerjoin
在合并时会包括 Tright
中除键变量以外的所有变量。
输出参量
T
— Tleft
和 Tright
的内联
表 | 时间表
Tleft
和 Tright
的内联,以表或时间表形式返回。表 Tleft
和 Tright
中每一对具有相同键变量值组合的行,在输出表或时间表 T
中都有一个对应的行。如果 Tleft
和 Tright
含有名称相同的变量,则 innerjoin
在 T
中对应的变量名称上添加唯一后缀。
一般来说,如果表 Tleft
有 m
行、表 Tright
有 n
行都包含相同的键变量值组合,则表 T
将基于该组合包含 m*n
行。
T
由键变量内的值来排序,并包含 Tleft(ileft,LeftVars)
和 Tright(iright,RightVars)
的水平串联。在默认情况下,LeftVars
包括 Tleft
的所有变量,RightVars
包括 Tright
中的所有非键变量。否则,LefttVars
包含由 'LeftVariables'
名称-值对组参量指定的变量,RightVars
是由 'RightVariables'
名称-值对组参量指定的变量。
您可以在 T
中存储描述、变量单位、变量名称和行名称等附加元数据。有关详细信息,请参阅 table
或 timetable
的“属性”部分。
ileft
— Tleft
的索引
列向量
Tleft
的索引,以列向量形式返回。ileft
的每个元素标识 Tleft
中与输出表或时间表 T
中的行对应的行。
iright
— Tright
的索引
列向量
Tright
的索引,以列向量形式返回。iright
的每个元素标识 Tright
中与输出表或时间表 T
中的行对应的行。
详细信息
键变量
用于在输入表 Tleft
与 Tright
之间匹配和组合数据的变量。
算法
来自输入表或时间表的行标签向量可以用作键变量,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为
'Row'
(如果是表的行名称)、行时间的时间表向量的名称,或者
的值,其中T
.Properties.DimensionNames{1}
是表或时间表。T
通常,
innerjoin
将行标签从输入表Tleft
复制到输出表T
。如果
Tleft
没有行标签,则T
没有行标签。如果
Tleft
有行标签,则innerjoin
复制Tleft
的行标签,以创建T
的行标签。但是,如果
Tleft
和Tright
都是表,而您未将任何输入的行名称指定为键,则innerjoin
不会在T
中创建行名称。如果
Tleft
和Tright
均为时间表,但您没有将任一输入的行时间指定为键,则innerjoin
会将行时间从Tleft
复制到T
。
您不能使用
Tleft
的行标签作为左键、使用Tright
的变量作为右键来执行内联。要执行内联,请将Tleft
的行标签转换为表变量,然后使用新的表变量作为键。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
用法说明和限制:
以下名称-值参量的值不支持模式表达式:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
通常,输入表不能有任何同名的非键变量。但是,如果指定
'LeftVariables'
和'RightVariables'
名称-值参量,则可以联接输入表的子集。指定这些参量,以便'LeftVariables'
和'RightVariables'
中不会出现变量名称。这些名称-值参量的值必须为常量:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
以下名称-值参量的值不支持模式表达式:
'Keys'
'LeftKeys'
'RightKeys'
'LeftVariables'
'RightVariables'
不支持嵌套的表和时间表。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
版本历史记录
在 R2013b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)