联接表
说明
联接表任务允许您以交互方式组合两个表,可以是通过执行联接,也可以是水平或垂直串联表。该任务会自动为您的实时脚本生成 MATLAB® 代码。
使用此任务,您可以:
对表执行联接,包括内联和外联,方法是指定键变量,这些表变量的匹配值(又称键值)决定要将哪些行合并到输出表中。
对具有相同行数或变量数的表进行水平或垂直串联。
打开任务
要在 MATLAB 编辑器中将联接表任务添加到实时脚本中,请执行以下操作:
在实时编辑器选项卡上,选择任务 > 联接表。
在脚本的代码块中,键入相关关键字,例如
join
或tables
。从建议的命令自动填充项中选择Join Tables
。
示例
使用实时编辑器任务来联接表
使用联接表实时编辑器任务对两个表执行内联和外联。
首先,加载 orders
表,其中包含订单 ID、客户名称和每次发货对应的订单日期。
load orders
orders
orders=3×3 table
OrderID CustomerID OrderDate
_______ __________ ___________
5120 "Sanchez" 23-Apr-2019
1037 "Li" 18-Apr-2019
8937 "Johnson" 16-Apr-2019
然后加载 items
表,其中包含客户排序的产品,以及该产品的数量、价格和发货状态。和 orders
一样,该表的每行都包含订单 ID。由于客户可以订购多项产品,因此 items
中的多行可以对应于 orders
中的一笔订单。
load items
items
items=5×5 table
OrderID Product Quantity Price Status
_______ ________________ ________ _____ _________
6005 "Dozen Roses" 1 39.99 Shipped
1037 "Petunia Basket" 1 23.99 Delivered
5120 "Tulips" 12 0.99 Pending
1037 "Gardenias" 1 17.99 Shipped
1037 "Gerber Daisies" 6 1.99 Delivered
打开联接表任务。要打开任务,请在代码块中键入关键字 join
,并选择菜单中出现的 Join Tables
。
使用该任务执行 orders
和 items
的内联。当任务打开时:
分别选择
orders
和items
作为左表和右表。选择
OrderID
作为两个表的键变量。点击内联按钮。
要查看此任务生成的代码,请点击任务参数区域底部的显示代码展开任务显示。
joinedData=4×7 table
OrderID CustomerID OrderDate Product Quantity Price Status
_______ __________ ___________ ________________ ________ _____ _________
1037 "Li" 18-Apr-2019 "Petunia Basket" 1 23.99 Delivered
1037 "Li" 18-Apr-2019 "Gardenias" 1 17.99 Shipped
1037 "Li" 18-Apr-2019 "Gerber Daisies" 6 1.99 Delivered
5120 "Sanchez" 23-Apr-2019 "Tulips" 12 0.99 Pending
当您执行内联时,输出表仅包括那些同时出现在左表和右表中的键值。
只有值
1037
和5120
同时出现在两个输入表中。因此,输出表只包含这两笔订单的数据。值
1037
在items
中出现多次,每次出现对应一项产品,但在orders
中仅出现一次。因此,对应于1037
的CustomerID
和OrderDate
值会在输出中相应复制多次。
接下来,使用该任务执行左外联。外联可以包括仅出现在一个输入表中的键值。例如,左外联包括左表中的所有键值,无论它们在右表是否有相应的匹配项。如果右表中有键值在左表中没有匹配项,则这些键值不会包括在内。
点击左外联按钮。
选中合并键变量复选框。默认情况下,外联会将左表和右表中的键变量分别作为单独的变量复制到输出表中。合并键变量,使得输出中只有一个键变量。
要查看此任务生成的代码,请点击任务参数区域底部的显示代码展开任务显示。
joinedData2=5×7 table
OrderID CustomerID OrderDate Product Quantity Price Status
_______ __________ ___________ ________________ ________ _____ ___________
1037 "Li" 18-Apr-2019 "Petunia Basket" 1 23.99 Delivered
1037 "Li" 18-Apr-2019 "Gardenias" 1 17.99 Shipped
1037 "Li" 18-Apr-2019 "Gerber Daisies" 6 1.99 Delivered
5120 "Sanchez" 23-Apr-2019 "Tulips" 12 0.99 Pending
8937 "Johnson" 16-Apr-2019 <missing> NaN NaN <undefined>
输出表中包括订单 8937
的数据。但是,由于订单 8937
在 items
表中没有项,因此该行的其余部分会填入空值(如 <missing>
、NaN
或 <undefined>
)。当左表或右表没有与键值相关联的数据时,外联用空值填充表元素。
全外联包括两个表中的所有键值和数据。
左外联包括左表中的所有键值和数据,以及右表中的匹配键值和相关数据。
右外联包括右表中的所有键值和数据,以及左表中的匹配键值和相关数据。
相关示例
参数
左表
— 表或时间表的名称
下拉列表项
从包含工作区中所有非空表和时间表的列表中指定名称。
右表
— 表或时间表的名称
下拉列表项
从包含工作区中所有非空表和时间表的列表中指定名称。
键变量
— 具有键值的表变量的名称
下拉列表项
从包含左表或右表变量的列表中指定变量的名称。
左表的下拉列表包含其变量的完整列表。
右表的下拉列表包含变量的子集。右表键变量的列表受限于您在左表中选择的键变量。
当您指定一个键变量时,其值将决定要合并左表和右表中的哪些行。要指定多组键变量,请使用 + 按钮。
合并键变量
— 用于合并左右键变量的选项
off
(默认) | on
执行外联时,合并对应的键变量。默认情况下,外联会将左表和右表中的键变量分别作为单独的变量复制到输出表中。要在输出中将左表和右表中对应的键变量组合成一个变量,请选中此复选框。
版本历史记录
在 R2019b 中推出R2023b: 当行时间不是键值时,按行时间对输出时间表排序
当实时编辑器中的联接表任务的左侧输入是时间表时,即使没有将行时间指定为键值,也可以按行时间对输出时间表进行排序。在这种情况下,要按行时间排序,请选中按行时间排序结果复选框。
仅当以下三个条件都为 true 时,此排序选项才可用:
左侧输入是按行时间排序的时间表。
您可以指定外联或内联。
您没有将行时间指定为键值。
如果您指定行时间为键值,则输出时间表将自动按行时间排序。
R2022b: 任务根据评分算法自动选择键变量
如果联接表实时编辑器任务无法根据行标签或变量名称自动选择第一对键变量,则它会尝试根据自动建议:基于数据科学笔记本学习推荐数据准备步骤。联接表任务使用以下步骤选择和测试候选的键变量对:
选择行名称(在表中)或行时间(在时间表中)作为第一对键变量。
如果步骤 1 失败,则选择名称完全匹配的变量作为第一对键变量。
如果步骤 1 和步骤 2 均失败,则使用评分算法对变量对进行评分。选择得分最高的变量对作为第一对键变量。
如果之前的所有步骤都失败,则选择键变量下拉列表中的第一项作为第一对键变量。
在以前的版本中,步骤 3 是选择其名称给出最佳部分匹配的变量对作为第一对键变量。
R2022a: 如果输入包含的元素超过一百万个,则实时编辑器任务不会自动运行
如果输入包含的元素超过一百万个,则此实时编辑器任务不会自动运行。在以前的版本中,对于任何大小的输入,该任务始终自动运行。如果输入包含大量元素,则由此任务生成的代码可能需要相当长的时间来运行(超过几秒)。
当任务不自动运行时,自动运行指示符会被禁用。您可以在需要时手动运行任务,也可以选择启用任务自动运行。
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)