主要内容

innerjoin

两个表或时间表之间的内联

说明

T = innerjoin(Tleft,Tright) 使用键变量TTleft 进行内联,从而创建表或时间表 Tright。内联会组合那些键变量具有匹配值的行。例如,如果 Tleft 具有名为 Key1Var1 的变量,Tright 具有变量 Key1Var2,则 T=innerjoin(Tleft,Tright) 使用 Key1 作为键变量。

The output T has variables Key1, Var1, and Var2, and combines only the rows where Key1 has matching values in Tleft and Tright.

默认情况下,键变量是:

  • TleftTright 中具有相同名称的变量,如果两个输入均为表,或如果 Tleft 是时间表而 Tright 是表。

  • 行时间的向量,如果 TleftTright 均为时间表。

左表和右表中键变量的匹配值不必按相同顺序排列。内联可以在两个表的键变量之间执行一对多和多对一匹配。也就是说,在左表的键变量中出现一次的值在右表中可能有多个匹配项。同样,在右表的键变量中出现一次的值在左表中也可能有多个匹配项。

您只能对某些表和时间表组合执行内联。

  • 如果 Tleft 是表,则 Tright 必须是表。innerjoin 以表的形式返回 T

  • 如果 Tleft 是时间表,则 Tright 可以是表,也可以是时间表。innerjoin 以时间表的形式为两种输入组合返回 T

示例

T = innerjoin(Tleft,Tright,Name=Value) 可在前面语法中的输入参量外使用一个或多个名称-值参量来指定选项。例如,您可以通过设置 KeysLeftKeysRightKeys 来指定将哪些变量用作键变量。

[T,ileft,iright] = innerjoin(___) 还返回索引向量 ileftiright,以分别指出 T 中的行与 TleftTright 中的行之间的对应项。您可以将这些与以上语法中的任何输入参量结合使用。

示例

示例

全部折叠

创建表 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,其数据来自表 TleftTright

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 包含表 TleftTright 的共同值,但同时也包含带有 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,其数据来自表 TleftTright。仅保留与变量 Key1 中的值相匹配的行。

还返回索引向量 ileftiright,以分别指出 T 中的行与 TleftTright 中的行之间的对应项。

[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,其数据来自表 TleftTright。将 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 仅保留与 TleftTright 之间对应键变量相匹配的行。

T 包含 Tleft(ileft,:)Tright(iright,"Var1") 的水平串联。

创建两个时间表 TleftTright。它们有一些相同的行时间,但还有一些对方所没有的行时间。

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  

通过内联合并 TleftTrightT 匹配具有相同行时间的行。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     

输入参数

全部折叠

左表,指定为表或时间表。

右表,指定为表或时间表。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: Keys=2 使用 Tleft 中的第二个变量和 Tright 中的第二个变量作为键变量。

用作键值的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

您不能将 Keys 名称-值参量与 LeftKeysRightKeys 名称-值参量配合使用。

行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。有关详细信息,请参阅算法部分。

示例: Keys=[1 3] 使用 TleftTright 中的第一和第三个变量作为键变量。

示例: Keys=["X" "Y"] 使用 XY 中名为 TleftTright 的变量作为键变量。

示例: 如果 Keys="Row"Tleft 均为具有行名称的表,则 Tright 使用 TleftTright 的行名称向量作为键变量。

用作 Tleft 中的键值的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

必须将 LeftKeys 名称-值参量与 RightKeys 名称-值参量结合使用。LeftKeysRightKeys 都必须指定相同数量的键变量。innerjoin 根据顺序对键值配对。

行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。有关详细信息,请参阅算法部分。

示例: LeftKeys=1 仅使用 Tleft 中的第一个变量作为键变量。

用作 Tright 中的键值的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

必须将 RightKeys 名称-值参量与 LeftKeys 名称-值参量结合使用。LeftKeysRightKeys 都必须指定相同数量的键变量。innerjoin 根据顺序对键值配对。

行标签向量可以用作键,既可以单独使用,也可以与其他键变量组合使用。有关详细信息,请参阅算法部分。

示例: RightKeys=3 仅使用 Tright 中的第三个变量作为键变量。

要包含在 T 中的来自 Tleft 的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

您可以使用 LeftVariables 在输出 T 中包含或排除键变量和非键变量。

默认情况下,innerjoin 包含来自 Tleft 的所有变量。

要包含在 T 中的来自 Tright 的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

您可以使用 RightVariables 在输出 T 中包含或排除键变量和非键变量。

默认情况下,innerjoin 在合并时会包括 Tright 中除键变量以外的所有变量。

输出参量

全部折叠

TleftTright 的内联,以表或时间表形式返回。表 TleftTright 中每一对具有相同键变量值组合的行,在输出表或时间表 T 中都有一个对应的行。如果 TleftTright 含有名称相同的变量,则 innerjoinT 中对应的变量名称上添加唯一后缀。

一般来说,如果表 Tleftm 行、表 Trightn 行都包含相同的键变量值组合,则表 T 将基于该组合包含 m*n 行。

T 由键变量内的值来排序,并包含 Tleft(ileft,leftVars)Tright(iright,rightVars) 的水平串联。在默认情况下,leftVars 包括 Tleft 的所有变量,rightVars 包括 Tright 中的所有非键变量。否则,leftVars 包含由 LeftVariables 名称-值参量指定的变量,rightVars 是由 RightVariables 名称-值参量指定的变量。

您可以在 T 中存储描述、变量单位、变量名称和行名称等附加元数据。有关详细信息,请参阅 tabletimetable 的“属性”部分。

Tleft 的索引,以列向量形式返回。ileft 的每个元素标识 Tleft 中与输出表或时间表 T 中的行对应的行。

Tright 的索引,以列向量形式返回。iright 的每个元素标识 Tright 中与输出表或时间表 T 中的行对应的行。

详细信息

全部折叠

算法

  • 来自输入表或时间表的行标签向量可以用作键变量,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为 "Row"(如果是表的行名称)、行时间的时间表向量的名称,或者 T.Properties.DimensionNames{1} 的值,其中 T 是表或时间表。

    通常,innerjoin 将行标签从输入表 Tleft 复制到输出表 T

    • 如果 Tleft 没有行标签,则 T 没有行标签。

    • 如果 Tleft 有行标签,则 innerjoin 复制 Tleft 的行标签,以创建 T 的行标签。

      • 但是,如果 TleftTright 都是表,而您未将任何输入的行名称指定为键,则 innerjoin 不会在 T 中创建行名称。

      • 如果 TleftTright 均为时间表,但您没有将任一输入的行时间指定为键,则 innerjoin 会将行时间从 Tleft 复制到 T

    您不能使用 Tleft 的行标签作为左键、使用 Tright 的变量作为右键来执行内联。要执行内联,请将 Tleft 的行标签转换为表变量,然后使用新的表变量作为键。

扩展功能

全部展开

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2013b 中推出

另请参阅

函数

实时编辑器任务