соединение

Класс: набор данных

Объедините наблюдения

Тип данных dataset может быть удален в будущем релизе. Чтобы работать с гетерогенными данными, используйте тип данных MATLAB® table вместо этого. Смотрите MATLAB документация table для получения дополнительной информации.

Синтаксис

C = join(A,B)
C = join(A,B,keys)
C = join(A,B,param1,val1,param2,val2,...)
[C,IB] = join(...)
C = join(A,B,'Type',TYPE,...)
C = join(A,B,'Type',TYPE,'MergeKeys',true,...)
[C,IA,IB] = join(A,B,'Type',TYPE,...)

Описание

C = join(A,B) создает массив набора данных C путем слияния наблюдений от двух массивов набора данных A и B. join выполняет слияние первыми ключевыми переменными открытия, то есть, парами переменных набора данных, один в A и один в B, та доля то же имя. Каждое наблюдение в B должно содержать уникальную комбинацию значений в ключевых переменных и должно содержать все комбинации значений, которые присутствуют в ключах от A. join затем использует эти ключевые переменные, чтобы задать many-one соответствие между наблюдениями в A и теми в B. join использует это соответствие, чтобы реплицировать наблюдения в B и объединить их с наблюдениями в A, чтобы создать C.

C = join(A,B,keys) выполняет слияние с помощью переменных, заданных keys как ключевые переменные и в A и в B. keys является положительным целым числом, вектором положительных целых чисел, вектора символов, массива строк, массива ячеек из символьных векторов или логического вектора.

C содержит одно наблюдение для каждого наблюдения в A. Переменные в C включают все переменные из A, а также одну переменную, соответствующую каждой переменной в B (за исключением ключей от B). Если A и B содержат переменные с идентичными именами, join добавляет суффиксный '_left' и '_right' к соответствующим переменным в C.

C = join(A,B,param1,val1,param2,val2,...) задает дополнительное название параметра / пары значения, чтобы управлять, как переменные набора данных в A и B используются в слиянии. Параметры:

  • ключи Задает переменные, чтобы использовать в качестве ключей и A и B.

  • 'LeftKeys' Задает переменные, чтобы использовать в качестве ключей в A.

  • 'RightKeys' Задает переменные, чтобы использовать в качестве ключей в B.

Можно обеспечить или параметр 'Keys', или и 'LeftKeys' и параметры 'RightKeys'. Значение для этих параметров является положительным целым числом, вектором положительных целых чисел, вектора символов, массива строк, массива ячеек из символьных векторов или логического вектора. 'LeftKeys' или 'RightKeys' должны и задать то же количество ключевых переменных, и join соединяет левые и правые ключи в заданном порядке.

  • 'LeftVars' — Задает который переменные из A включать в C. По умолчанию join включает все переменные из A.

  • 'RightVars' — Задает который переменные из B включать в C. По умолчанию join включает все переменные из B кроме ключевых переменных.

Можно использовать 'LeftVars' или 'RightVars', чтобы включать или исключить ключевые переменные, а также переменные данных. Значение для этих параметров является положительным целым числом, вектором положительных целых чисел, вектора символов, массива строк, массива ячеек из символьных векторов или логического вектора.

[C,IB] = join(...) возвращает индексный вектор IB, где join создает C путем горизонтальной конкатенации A(:,LeftVars) и B(IB,RightVars). join может также выполнить более сложное внутреннее объединение и операции внешнего соединения, которые позволяют many-many соответствие между A и B, и позволяют несопоставленные наблюдения или в A или в B.

C = join(A,B,'Type',TYPE,...) выполняет операцию соединения, заданную TYPE. TYPE является одним из 'inner', 'leftouter', 'rightouter', 'fullouter' или 'outer' (который является синонимом для 'fullouter'). Для внутреннего объединения C только содержит наблюдения, соответствующие комбинации значений ключа, которые произошли и в A и в B. Для левого (или право) внешнее соединение, C также содержит наблюдения, соответствующие ключам в A (или B), который не совпадал ни с кем в B (или A). Переменные в C, взятом из A (или B), содержат нулевые значения в тех наблюдениях. Полное внешнее соединение эквивалентно левому и правому внешнему соединению. C содержит переменные, соответствующие ключевым переменным и из A и из B, и join сортирует наблюдения в C значениями ключа.

Для внутренних объединений и внешних соединений, C содержит переменные, соответствующие ключевым переменным и из A и из B по умолчанию, а также всех остающихся переменных. join сортирует наблюдения в результате C значениями ключа.

C = join(A,B,'Type',TYPE,'MergeKeys',true,...) включает одну переменную в C для каждой ключевой переменной пары от A и B, вместо включения двух отдельных переменных. Для внешних соединений join создает одну переменную путем слияния значений ключа от A и B, принятия значения от A, где соответствующее наблюдение существует в A, и от B в противном случае. Установка параметра 'MergeKeys' на true заменяет включение или исключение любых ключевых переменных, заданных через параметр 'RightVars' или 'LeftVars'. Установка параметра 'MergeKeys' на false эквивалентна не передаче в параметре 'MergeKeys'.

[C,IA,IB] = join(A,B,'Type',TYPE,...) возвращает индексные векторы IA и IB, указывающий на соответствие между наблюдениями в C и теми в A и B. Для внутреннего объединения join создает C путем горизонтальной конкатенации A(IA,LeftVars) и B(IB,RightVars). Для внешнего соединения IA или IB могут также содержать нули, указывая на наблюдения в C, которые не соответствуют наблюдениям в A или B, соответственно.

Примеры

Создайте массив набора данных из ирисовых данных Фишера:

load fisheriris
NumObs = size(meas,1);
NameObs = strcat({'Obs'},num2str((1:NumObs)','%-d'));
iris = dataset({nominal(species),'species'},...
               {meas,'SL','SW','PL','PW'},...
               'ObsNames',NameObs);

Создайте разделять массив набора данных с диплоидными счетами хромосомы для каждой разновидности ирисовой диафрагмы:

snames = nominal({'setosa';'versicolor';'virginica'});
CC = dataset({snames,'species'},{[38;108;70],'cc'})
CC = 
    species       cc 
    setosa         38
    versicolor    108
    virginica      70

Широковещательно передайте данные в CC к строкам iris с помощью ключевой переменной species в каждом наборе данных:

iris2 = join(iris,CC);
iris2([1 2 51 52 101 102],:)
ans = 
           species       SL     SW     PL     PW     cc 
 Obs1      setosa        5.1    3.5    1.4    0.2     38
 Obs2      setosa        4.9      3    1.4    0.2     38
 Obs51     versicolor      7    3.2    4.7    1.4    108
 Obs52     versicolor    6.4    3.2    4.5    1.5    108
 Obs101    virginica     6.3    3.3      6    2.5     70
 Obs102    virginica     5.8    2.7    5.1    1.9     70

Создайте два набора данных и соедините их использующий флаг 'MergeKeys':

% Create two data sets that both contain the key variable 
% 'Key1'. The two arrays contain observations with common
% values of Key1, but each array also contains observations
% with values of Key1 not present in the other.
a = dataset({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',...
   'VarNames',{'Key1' 'Var1'})
b = dataset({'a' 'b' 'd' 'e'}',[4 5 6 7]',...
   'VarNames',{'Key1' 'Var2'})

% Combine a and b with an outer join, which matches up
% observations with common key values, but also retains
% observations whose key values don't have a match. 
% Keep the key values as separate variables in the result.
couter = join(a,b,'key','Key1','Type','outer')

% Join a and b, merging the key values as a single variable
% in the result.
coutermerge = join(a,b,'key','Key1','Type','outer',...
   'MergeKeys',true)

% Join a and b, retaining only observations whose key
% values match.
cinner = join(a,b,'key','Key1','Type','inner',...
   'MergeKeys',true) 

a = 

    Key1       Var1
    'a'         1  
    'b'         2  
    'c'         3  
    'e'        11  
    'h'        17  


b = 

    Key1       Var2
    'a'        4   
    'b'        5   
    'd'        6   
    'e'        7   


couter = 

    Key1_left    Var1    Key1_right    Var2
    'a'            1     'a'             4 
    'b'            2     'b'             5 
    'c'            3     ''            NaN 
    ''           NaN     'd'             6 
    'e'           11     'e'             7 
    'h'           17     ''            NaN 


coutermerge = 

    Key1       Var1    Var2
    'a'          1       4 
    'b'          2       5 
    'c'          3     NaN 
    'd'        NaN       6 
    'e'         11       7 
    'h'         17     NaN 


cinner = 

    Key1       Var1    Var2
    'a'         1      4   
    'b'         2      5   
    'e'        11      7  

Смотрите также