Main Content

join

(非推奨) データ セット配列の観測値のマージ

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) は、2 つのデータセット配列 AB の観測値をマージして、データセット配列 C を作成します。join は、AB に同じ変数名で含まれている "キー変数" を検出してマージを実行します。B の各観測値はキー変数に含まれる値の一意な組み合わせでなければなりません。さらに、その組み合わせを構成する値が、A のキー変数に存在しなければなりません。次に、join はこれらのキー変数を使用して、A の観測値と B の観測値の間に多対一の対応を定義します。join はこの対応を使用して、B の観測値を複製し、A の観測値と組み合わせて C を作成します。

C = join(A,B,keys) は、AB の両方で keys によってキー変数として指定された変数を使用してマージを実行します。keys は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。

C は、A の各観測に対して 1 つの観測を含んでいます。C の変数には、A のすべての変数と、B の各変数 (B のキー変数を除く) に対応する 1 つの変数が含まれます。AB に同じ名前の変数がある場合、join は接尾辞 '_left''_right'C の対応する変数に追加します。

C = join(A,B,param1,val1,param2,val2,...) は、A および B にあるデータセット変数がマージでどのように使用されるかを制御するオプションのパラメーター名/値のペアを指定します。パラメーターは以下のとおりです。

  • 'Keys'AB の両方でキーとして使用される変数を指定します。

  • 'LeftKeys'A でキーとして使用される変数を指定します。

  • 'RightKeys'B でキーとして使用される変数を指定します。

'Keys' パラメーターを指定するか、'LeftKeys''RightKeys' パラメーターの両方を指定できます。これらのパラメーターの値は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。'LeftKeys' または 'RightKeys' は、どちらも同じ個数のキー変数を指定しなければならず、join は、指定された順序で左右のキーを組み合わせます。

  • 'LeftVars'C に含める A の変数を指定します。既定の設定では、join には A のすべての変数が含まれます。

  • 'RightVars'C に含める B の変数を指定します。既定の設定では、join には、キー変数以外の B のすべての変数が含まれます。

'LeftVars' または 'RightVars' を使用すると、キー変数およびデータ変数を含めたり、除外したりできます。これらのパラメーターの値は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。

[C,IB] = join(...) は、インデックス ベクトル IB を返します。ここで、joinA(:,LeftVars)B(IB,RightVars) を水平方向に連結して C を構築します。また、join は、AB の間の多対多の対応を実現したり、A または B 内での一致しない観測を許容したりする複雑な内部および外部連結操作も実行できます。

C = join(A,B,'Type',TYPE,...) は、TYPE で指定された連結操作を実行します。TYPE は、'inner''leftouter''rightouter''fullouter' または 'outer' ('fullouter' と同義) のいずれかです。内部連結の場合、C には、AB の両方にあるキー値の組み合わせに対応する観測のみが含まれます。左 (または右) 外部連結の場合、C には、B (または A) に一致するキーがなかった A (または B) のキーに対応する観測も含まれます。これらの観測について、A (または B) から取得された C の変数には null 値が含まれます。完全な外部連結は、左および右の外部連結と同じです。C には、AB の両方のキー変数に対応する変数が格納されます。join は、キー値順に C 内の観測値を並べ替えます。

内部連結と外部連結の場合、既定の設定では A および B の両方のキー変数に対応する変数と、その他のすべての変数が C に格納されます。join は、キー値順に結果 C 内の観測値を並べ替えます。

C = join(A,B,'Type',TYPE,'MergeKeys',true,...) は、2 つの個別の変数を含むのではなく、A および B の各キー変数ペアに対する 1 つの変数を C に含んでいます。外部連結の場合、join は、A および B のキー値を結合することで 1 つの変数を作成します。さらに、対応する観測が A に存在する場合は A の値を、それ以外の場合は B の値を使用します。'MergeKeys' パラメーターを true に設定すると、'LeftVars' または 'RightVars' パラメーターで指定したすべてのキー変数を含めるか除くかの指定がオーバーライドされます。'MergeKeys' パラメーターを false に設定することは、'MergeKeys' パラメーターを渡さないのと同じことになります。

[C,IA,IB] = join(A,B,'Type',TYPE,...) は、C 内の観測と A および B 内の観測の間の対応を示すインデックス ベクトル IA および IB を返します。内部連結の場合、join は、A(IA,LeftVars)B(IB,RightVars) を水平方向に連結して、C を構築します。外部連結の場合、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);

アヤメのそれぞれの種に対して、2 倍染色体数をもつデータセット配列を作成します。

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

各データセット内のキー変数 species を使用して CC 内のデータを iris の行にブロードキャストします。

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' フラグを使用して 2 つのデータセットを作成し、連結します。

% 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  

参考