MATLAB 中的左连接表

Jes*_*par 5 matlab join left-join

我试图找到一些相关的东西,但没有成功,除了这篇文章,我不能说它有帮助。

我有两个表 A 和 B:A 的尺寸为 5x5,并且在LastName

LastName = {'Smith';'Johnson';'Williams';'Smith';'Williams'};
YearNow= [2010;2010;2010;2010;2010];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124; 109; 125; 117; 122];
A = table(LastName,YearNow,Height,Weight,BloodPressure);
Run Code Online (Sandbox Code Playgroud)

B 的尺寸为 3x2,且唯一值在LastName

LastName = {'Smith';'Johnson';'Williams'};
YearBorn= [1950;1975;1965];
B = table(LastName,YearBorn);
Run Code Online (Sandbox Code Playgroud)

我想在表 A 上创建一个新列,在我为每个 A.YearNow 减去 B.YearBorn 后,该列将包含他们的年龄,因此最后一列将具有以下形式

A.Age = [60,35,45,60,45];
Run Code Online (Sandbox Code Playgroud)

当我尝试使用时[detect,pos] = ismember(A,B(:,1));出现错误:

A 和 B 必须包含相同的变量。

任何帮助,将不胜感激。

zun*_*rtj 7

您也可以使用 Matlab 代替ismember,因为它很容易出错,因为您必须按正确的顺序排列内容outerjoin:

A = outerjoin(A,B,'Type','Left','MergeKeys',true);
A.Age = A.YearNow - A.YearBorn;
Run Code Online (Sandbox Code Playgroud)

请注意,outerjoin修改顺序。有关所有输入参数,请参阅官方 Matlab 文档。

outerjoinover的另一个优点ismember是,如果表 A 中的所有姓氏不存在于表 B 中,您将必须使用 预先分配输出ismember,并使用第一个输出参数。