MATLAB внутреннее объединение двух таблиц, считающих записи NaN идентичными - PullRequest
1 голос
/ 03 июня 2019

Я хотел бы объединить несколько таблиц, где ключевые столбцы содержат много значений 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 столбцов ключей обрабатываются одинаково, поэтому выполняется внутреннее объединение записи, где Key1 - это «e», а Key2 - это 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 Ответ

2 голосов
/ 04 июня 2019

Вы можете заменить 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;
...