Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

outerjoin

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

说明

示例

T = outerjoin(Tleft,Tright) 使用键变量TleftTright 外联,从而创建表或时间表 T。两个表中同名的所有变量均为键变量。外联会合并键变量具有匹配值的表行,并且也包括两个输入表间键变量不匹配的行。例如,如果 Tleft 具有名为 Key1Var1 的变量,Tright 具有变量 Key1Var2,则 T=outerjoin(Tleft,Tright) 使用 Key1 作为键变量。

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

您可以仅对表和时间表的某些组合执行外联。

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

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

TleftTright 的行标签向量可以用作键变量。行标签是表的行名称或时间表的行时间。

示例

T = outerjoin(Tleft,Tright,Name,Value) 通过由一个或多个 Name,Value 对组参数指定的其他选项执行外联运算。

示例

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

示例

全部折叠

创建表 Tleft

Tleft = table([5;12;23;2;15;6],...
        {'cheerios';'pizza';'salmon';'oreos';'lobster';'pizza'},...
        'VariableNames',{'Age','FavoriteFood'},...
        'RowNames',{'Amy','Bobby','Holly','Harry','Marty','Sally'})
Tleft=6×2 table
             Age    FavoriteFood
             ___    ____________

    Amy       5     {'cheerios'}
    Bobby    12     {'pizza'   }
    Holly    23     {'salmon'  }
    Harry     2     {'oreos'   }
    Marty    15     {'lobster' }
    Sally     6     {'pizza'   }

创建表 Tright,使其与 Tleft 有一个名为 FavoriteFood 的共同变量。

Tright = table({'cheerios';'oreos';'pizza';'salmon';'cake'},...
         [110;160;140;367;243],...
         {'A-';'D';'B';'B';'C-'},...
         'VariableNames',{'FavoriteFood','Calories','NutritionGrade'})
Tright=5×3 table
    FavoriteFood    Calories    NutritionGrade
    ____________    ________    ______________

    {'cheerios'}      110           {'A-'}    
    {'oreos'   }      160           {'D' }    
    {'pizza'   }      140           {'B' }    
    {'salmon'  }      367           {'B' }    
    {'cake'    }      243           {'C-'}    

使用 outerjoin 函数创建新表 T,其数据来自表 TleftTright

T = outerjoin(Tleft,Tright)
T=7×5 table
    Age    FavoriteFood_Tleft    FavoriteFood_Tright    Calories    NutritionGrade
    ___    __________________    ___________________    ________    ______________

    NaN       {0x0 char  }          {'cake'    }          243         {'C-'    }  
      5       {'cheerios'}          {'cheerios'}          110         {'A-'    }  
     15       {'lobster' }          {0x0 char  }          NaN         {0x0 char}  
      2       {'oreos'   }          {'oreos'   }          160         {'D'     }  
     12       {'pizza'   }          {'pizza'   }          140         {'B'     }  
      6       {'pizza'   }          {'pizza'   }          140         {'B'     }  
     23       {'salmon'  }          {'salmon'  }          367         {'B'     }  

T 包含了对应 Tleft 中键变量的单独变量 FavoriteFood_Tleft,以及对应 Tright 中键变量的单独变量 FavoriteFood_Tright

创建表 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  

使用 outerjoin 函数创建新表 T,其数据来自表 TleftTright。在输出表 T 中将键值合并成单一变量。

T = outerjoin(Tleft,Tright,'MergeKeys',true)
T=6×3 table
    Key1     Var1    Var2
    _____    ____    ____

    {'a'}      1       4 
    {'b'}      2       5 
    {'c'}      3     NaN 
    {'d'}    NaN       6 
    {'e'}     11       7 
    {'h'}     17     NaN 

T 中来自 Tleft 的变量在 Tright 中不存在匹配值的相应行上包含空值。同样,T 中来自 Tright 的变量在 Tleft 中不存在匹配值的相应行上包含空值。

创建表 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  

使用 outerjoin 函数创建新表 T,其数据来自表 TleftTright。匹配键变量 Key1 拥有共同值的各行,但同时也保留关键值无匹配对象的各行。

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

[T,ileft,iright] = outerjoin(Tleft,Tright)
T=6×4 table
    Key1_Tleft    Var1    Key1_Tright    Var2
    __________    ____    ___________    ____

    {'a'     }      1     {'a'     }       4 
    {'b'     }      2     {'b'     }       5 
    {'c'     }      3     {0x0 char}     NaN 
    {0x0 char}    NaN     {'d'     }       6 
    {'e'     }     11     {'e'     }       7 
    {'h'     }     17     {0x0 char}     NaN 

ileft = 6×1

     1
     2
     3
     0
     4
     5

iright = 6×1

     1
     2
     0
     3
     4
     0

索引向量 ileftiright 包含的零值表示表格 T 中的该行分别在表格 TleftTright 中不存在对应行。

创建表 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  

使用 outerjoin 函数创建新表 T,其数据来自表 TleftTright。忽略 Tright 中其关键值在 Tleft 中不存在匹配行的各行。

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

[T,ileft,iright] = outerjoin(Tleft,Tright,'Type','left')
T=5×4 table
    Key1_Tleft    Var1    Key1_Tright    Var2
    __________    ____    ___________    ____

      {'a'}         1     {'a'     }       4 
      {'b'}         2     {'b'     }       5 
      {'c'}         3     {0x0 char}     NaN 
      {'e'}        11     {'e'     }       7 
      {'h'}        17     {0x0 char}     NaN 

ileft = 5×1

     1
     2
     3
     4
     5

iright = 5×1

     1
     2
     0
     4
     0

ileft 的所有值都非零,表示 T 中的所有行在 Tleft 中拥有对应行。

创建两个时间表 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  

通过外联合并 TleftTrightT1 匹配具有相同行时间的行,但也包含没有匹配项的行。

T1 = outerjoin(Tleft,Tright)
T1=5×2 timetable
    Time     Var1_Tleft    Var1_Tright
    _____    __________    ___________

    1 sec         1            NaN    
    2 sec         2              4    
    4 sec         3              5    
    6 sec        11              6    
    7 sec       NaN              7    

合并 TleftTright,但忽略 Tright 中行时间与 Tleft 中的任何行时间都不匹配的行。

T2 = outerjoin(Tleft,Tright,'Type','left')
T2=4×2 timetable
    Time     Var1_Tleft    Var1_Tright
    _____    __________    ___________

    1 sec         1            NaN    
    2 sec         2              4    
    4 sec         3              5    
    6 sec        11              6    

输入参数

全部折叠

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

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

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

合并关键字标志,指定为由 'MergeKeys'falsetrue01 中的任一值组成的、以逗号分隔的对组。

false

对于来自表格 TleftTright 的每个键变量对组,outerjoin 在输出表格 T 中包含两个单独的变量。

此行为是默认行为。

true

对于来自表格 TleftTright 的每个键变量对组,outerjoin 在输出表格 T 中包含一个单独的变量。

outerjoin 通过合并来自 TleftTright 的关键值创建单独变量,当 Tleft 中存在对应行时即采用 Tleft 中的值,否则采用 Tright 中的值。

  • 如果您指定 'LeftVariables''RightVariables' 以只包含某个键变量对组中的一个键,outerjoin 将在输出表中包含合并的键 - 包含来自两个键变量的值。

  • 如果您指定 'LeftVariables''RightVariables' 以排除某个键变量对组中的全部两个键,则 outerjoin 不会在输出表中包含合并的键变量。

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

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

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

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

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

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

外联操作的类型,指定为以逗号分隔的对组,包含 'Type' 以及 'full'(表示全外联)、'left'(左外联)或 'right'(右外联)之一。

  • 对于全外联,T 包括两个表中的所有键值,如下图所示。

  • 对于左外联,T 包括 Tleft 中那些在 Tright 中没有任何匹配的键值,但排除 Tright 中那些在 Tleft 中没有任何匹配的键值。例如,在下图中,左外联排除了右表中的键值 7

  • 对于右外联,T 包括 Tright 中那些在 Tleft 中没有任何匹配的键值,但排除 Tleft 中那些在 Tright 中没有任何匹配的键值。例如,在下图中,右外联排除了左表中的键值 1

默认情况下,outerjoin 执行全外联并包含来自 TleftTright 的不匹配行。

输出参数

全部折叠

来自 TleftTright 的外联,以表的形式返回。对于表 TleftTright 中拥有相同关键值组合的每个行对组,输出表格 T 中包含相对应的一行。如果 TleftTright 含有名称相同的变量,则 outerjoinT 中对应的变量名称上添加唯一后缀。T 中来自 Tleft 的变量在 Tright 中不存在匹配值的相应行上包含空值。同样,T 中来自 Tright 的变量在 Tleft 中不存在匹配值的相应行上包含空值。

一般说来,如果表 Tleft 中有 m 行、表 Tright 中有 n 行都包含相同的键变量值组合,则表 T 包含该组合的 m*n 行。T 还包含了另一个输入表中不存在任何匹配行的一个输入表中键值组合所对应的行。

T 包含根据键变量值排序的 Tleft(ileft,LeftVars)Tright(iright,RightVars) 的水平串联。在默认情况下,LeftVars 包括 Tleft 的所有变量,RightVars 包括 Tright 中的所有变量。否则,LeftVars 包含 'LeftVariables' 名称-值对组参数所指定的变量,RightVars 包含 'RightVariables' 名称-值对组参数所指定的变量。

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

Tleft 的索引,以列向量形式返回。ileft 的每个元素标识表 Tleft 中与输出表 T 中该行相对应的行。向量 ileft 包含的零指示 TTleft 中无对应行的各行。

Tright 的索引,以列向量形式返回。iright 的每个元素标识表 Tright 中与输出表 T 中该行相对应的行。向量 iright 包含的零指示 TTright 中无对应行的各行。

详细信息

全部折叠

键变量

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

提示

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

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

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

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

      • 如果您指定 TleftTright 中的行标签作为键对组,则 outerjoin 可根据需要将 Tright 中的行标签合并到 T 的行标签。

      • 如果 Tleft 的行标签作为键值,但不指定 Tright 的行标签作为匹配的键值,则 outerjoin 会根据需要在 T 中创建默认行标签。

      • 如果 TleftTright 均为表,但您未将任一输入表的行名称指定为键值,则 outerjoin 不会在 T 中创建行名称。

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

扩展功能

另请参阅

| |

在 R2013b 中推出