Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

innerjoin

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

说明

示例

T = innerjoin(Tleft,Tright) 使用键变量TleftTright 进行内联,从而创建表或时间表 T。内联会组合那些键变量具有匹配值的行。例如,如果 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) 通过一个或多个 Name,Value 对组参量指定的其他选项执行内联运算。

例如,您可以指定要用作键变量的变量。

示例

[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 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

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

用作键值的变量,指定为逗号分隔的对组,包含 'Keys' 和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

您不能将 'Keys' 名称-值对组参量与 'LeftKeys''RightKeys' 名称-值对组参量配合使用。

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

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

示例: 'Keys',{'X','Y'} 使用 TleftTright 中名为 XY 的变量作为键变量。

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

用作 Tleft 中的键值的变量,指定为逗号分隔的对组,包含 'LeftKeys' 和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

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

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

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

用作 Tright 中的键值的变量,指定为逗号分隔的对组,包含 'RightKeys' 和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

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

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

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

要包含在 T 中的来自 Tleft 的变量,指定为逗号分隔的对组,包含 'LeftVariables' 和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern 标量或逻辑向量。

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

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

要包含在 T 中的来自 Tright 的变量,指定为逗号分隔的对组,包含 'RightVariables' 和一个正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、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 中的所有非键变量。否则,LefttVars 包含由 'LeftVariables' 名称-值对组参量指定的变量,RightVars 是由 'RightVariables' 名称-值对组参量指定的变量。

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

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

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

详细信息

全部折叠

键变量

用于在输入表 TleftTright 之间匹配和组合数据的变量。

算法

  • 来自输入表或时间表的行标签向量可以用作键变量,既可以单独使用,也可以与其他键变量组合使用。行标签是表的行名称或时间表的行时间。要将此向量用作键,请将其指定为 '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 中推出

另请参阅

| |