MATLAB内部联接两个将NaN条目视为相同的表

时间:2019-06-03 19:07:08

标签: matlab join inner-join nan

我想内部联接多个表,这些表的键列包含许多NaN值,并且合并表会删除这些条目,因为NaN并不相同。

我想用内部联接表将键列的NaN条目视为相同。 下面的示例演示了我遇到的问题:

>> A = table({'a' 'b' 'd' 'e'}',[123, 456, 789, NaN]',[4 5 6 7]', 'VariableNames', {'Key1', 'Key2', 'Var1'})
A =
  4×3 table
    Key1    Key2    Var1
    ____    ____    ____
    'a'     123      4  
    'b'     456      5  
    'd'     789      6  
    'e'     NaN      7  

>> B = table({'a' 'b' 'd' 'e'}', [123, 456, 789, NaN]', [1 2 3 4]', 'VariableNames', {'Key1', 'Key2', 'Var2'})
B =
  4×3 table
    Key1    Key2    Var2
    ____    ____    ____
    'a'     123      1  
    'b'     456      2  
    'd'     789      3  
    'e'     NaN      4  

>> innerjoin(A,B)
ans =
  3×4 table
    Key1    Key2    Var1    Var2
    ____    ____    ____    ____
    'a'     123      4       1  
    'b'     456      5       2  
    'd'     789      6       3  

所需的输出在下面,其中键列的NaN值被视为相同,因此对键1为'e'且键2为NaN的条目执行内部联接。

>> innerjoin(A,B)
ans =
  3×4 table
    Key1    Key2    Var1    Var2
    ____    ____    ____    ____
    'a'     123      4       1  
    'b'     456      5       2  
    'd'     789      6       3  
    'e'     NaN      7       4

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以将NaN替换为inf,应用innerjoin,然后重新替换:

A.Key2(isnan(A.Key2)) = inf;
B.Key2(isnan(B.Key2)) = inf;
result = innerjoin(A,B);
result.Key2(isinf(result.Key2)) = NaN;