join

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

(Не Рекомендуемый) Объединить наблюдения массива набора данных

The 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 затем использует эти ключевые переменные, чтобы задать соответствие «многие к одному» между наблюдениями в 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 используются в слиянии. Параметрами являются:

  • 'Keys' - Задает переменные для использования в качестве ключей в обоих 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 может также выполнять более сложные операции внутреннего и внешнего соединения, которые позволяют осуществлять соответствие «многие ко многим» между 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 переопределяет включение или исключение любых ключевых переменных, заданных через 'LeftVars' или 'RightVars' параметр. Установка '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  

См. также