2017-08-11 49 views
2

我試圖找到相關的東西,但無濟於事,除了這個post,我不能說這有幫助。Left在MATLAB中加入表格

我有兩個表A和B: A具有在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); 

尺寸5x5的和非唯一值和B在LastName

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

我想尺寸爲3×和獨特價值在表A中創建一個新的列,它將包含他們的年齡後,我減去每個A.YearNow B.YearBorn,所以最後一列將形式爲

A.Age = [60,35,45,60,45]; 

當我嘗試使用[detect,pos] = ismember(A,B(:,1));我得到一個錯誤:

A and B must contain the same variables.

任何幫助,將不勝感激。

回答

2

而不是使用ismember,這可以說是相當容易出錯,你必須把事情以正確的順序,你也可以使用Matlab的outerjoin代替:

A = outerjoin(A,B,'Type','Left','MergeKeys',true); 
A.Age = A.YearNow - A.YearBorn; 

注意outerjoin修改排序。查看所有輸入參數的official Matlab documentation

outerjoin超過ismember一個附加的優點是,在不情況下表A中所有LastNames表B中存在,則必須與ismember預先分配輸出,並使用所述第一輸出參數爲好。

1

您需要提取LastName列並將它們傳遞給ismember。然後你可以使用它返回的索引向量計算Age列如下:

[~, index] = ismember(A.LastName, B.LastName); 
A.Age = A.YearNow-B.YearBorn(index);