我想内部联接多个表,这些表的键列包含许多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
任何帮助将不胜感激!
答案 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;