Main Content

データセット配列の結合

この例では、join を使用してデータセット配列をマージする方法を示します。

標本データを読み込みます。

hospitalSmall.xlsx の最初のワークシートからデータセット配列にデータをインポートし、そのうちのごく一部の変数のみを保持します。

ds1 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'));
ds1 = ds1(:,{'id','name','sex','age'})
ds1 = 

    id               name              sex        age
    'YPL-320'        'SMITH'           'm'        38 
    'GLI-532'        'JOHNSON'         'm'        43 
    'PNI-258'        'WILLIAMS'        'f'        38 
    'MIJ-579'        'JONES'           'f'        40 
    'XLK-030'        'BROWN'           'f'        49 
    'TFP-518'        'DAVIS'           'f'        46 
    'LPD-746'        'MILLER'          'f'        33 
    'ATA-945'        'WILSON'          'm'        40 
    'VNL-702'        'MOORE'           'm'        28 
    'LQW-768'        'TAYLOR'          'f'        31 
    'QFY-472'        'ANDERSON'        'f'        45 
    'UJG-627'        'THOMAS'          'f'        42 
    'XUE-826'        'JACKSON'         'm'        25 
    'TRW-072'        'WHITE'           'm'        39 

データセット配列 ds1 には 14 件の観測 (行) と 4 個の変数 (列) があります。

hospitalSmall.xlsx のワークシート Heights2 からデータをインポートします。

ds2 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet','Heights2')
ds2 = 

    id               hgt
    'LPD-746'        61 
    'PNI-258'        62 
    'XUE-826'        71 
    'ATA-945'        72 
    'XLK-030'        63 

ds2 には最初のデータセット配列 ds1 のデータの一部である 5 人分の身長の測定値が格納されています。

一致する観測のサブセットのみをマージします。

join を使用すると、2 つのデータセット配列 ds1ds2 をマージし、ds2 の観測のサブセットのみを維持することができます。

JoinSmall = join(ds2,ds1)
JoinSmall = 

    id               hgt    name              sex        age
    'LPD-746'        61     'MILLER'          'f'        33 
    'PNI-258'        62     'WILLIAMS'        'f'        38 
    'XUE-826'        71     'JACKSON'         'm'        25 
    'ATA-945'        72     'WILSON'          'm'        40 
    'XLK-030'        63     'BROWN'           'f'        49 

JoinSmall では変数 id が 1 回だけ表示されています。これは、この変数がキー変数 (2 つのデータセット配列の観測をリンクする配列) となり、ds1ds2 で同じ変数名を使用しているためです。

不完全な観測をマージの対象にします。

ds1ds2 をマージし、大きい方の ds1 の観測をすべて保持します。

joinAll = join(ds2,ds1,'type','rightouter','mergekeys',true)
joinAll = 

    id               hgt    name              sex        age
    'ATA-945'         72    'WILSON'          'm'        40 
    'GLI-532'        NaN    'JOHNSON'         'm'        43 
    'LPD-746'         61    'MILLER'          'f'        33 
    'LQW-768'        NaN    'TAYLOR'          'f'        31 
    'MIJ-579'        NaN    'JONES'           'f'        40 
    'PNI-258'         62    'WILLIAMS'        'f'        38 
    'QFY-472'        NaN    'ANDERSON'        'f'        45 
    'TFP-518'        NaN    'DAVIS'           'f'        46 
    'TRW-072'        NaN    'WHITE'           'm'        39 
    'UJG-627'        NaN    'THOMAS'          'f'        42 
    'VNL-702'        NaN    'MOORE'           'm'        28 
    'XLK-030'         63    'BROWN'           'f'        49 
    'XUE-826'         71    'JACKSON'         'm'        25 
    'YPL-320'        NaN    'SMITH'           'm'        38 
ds1 の観測のうち、対応する身長の測定値が ds2 にないものについては、身長の値が NaN となります。また、ds1 の各観測に対応する id 値が ds2 にないため、'MergeKeys',true オプションを使用してキーをマージする必要があります。これにより、キー変数 id がマージされます。

キー変数名が異なるデータセット配列をマージします。

join を使用する場合、マージ対象のデータセット配列でキー変数の名前が同じである必要はありません。hospitalSmall.xlsx のワークシート Heights3 からデータをインポートします。

ds3 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet','Heights3')
ds3 = 

    identifier       hgt
    'GLI-532'        69 
    'QFY-472'        62 
    'MIJ-579'        61 
    'VNL-702'        68 
    'XLK-030'        63 
    'LPD-746'        61 
    'TFP-518'        60 
    'YPL-320'        71 
    'ATA-945'        72 
    'LQW-768'        64 
    'PNI-258'        62 
    'UJG-627'        61 
    'XUE-826'        71 
    'TRW-072'        69 

ds3 には、ds1 の各観測に対する身長の測定値が格納されています。このデータセット配列には ds1 と同じ患者識別子がありますが、変数名は identifier であり、id ではありません (順序も異なります)。

キー変数を指定します。

ds3 のキー変数名の変更は、d3.Properties.VarNames を設定するか、変数エディターを使用すれば簡単にできますが、マージに必須の作業ではありません。代わりに、LeftKeys および RightKeys を使用して各データセット配列のキー変数の名前を指定することができます。

joinDiff = join(ds3,ds1,'LeftKeys','identifier','RightKeys','id')
joinDiff = 

    identifier       hgt    name              sex        age
    'GLI-532'        69     'JOHNSON'         'm'        43 
    'QFY-472'        62     'ANDERSON'        'f'        45 
    'MIJ-579'        61     'JONES'           'f'        40 
    'VNL-702'        68     'MOORE'           'm'        28 
    'XLK-030'        63     'BROWN'           'f'        49 
    'LPD-746'        61     'MILLER'          'f'        33 
    'TFP-518'        60     'DAVIS'           'f'        46 
    'YPL-320'        71     'SMITH'           'm'        38 
    'ATA-945'        72     'WILSON'          'm'        40 
    'LQW-768'        64     'TAYLOR'          'f'        31 
    'PNI-258'        62     'WILLIAMS'        'f'        38 
    'UJG-627'        61     'THOMAS'          'f'        42 
    'XUE-826'        71     'JACKSON'         'm'        25 
    'TRW-072'        69     'WHITE'           'm'        39 

マージしたデータセット配列 joinDiff には、join への最初のデータセット配列入力である ds3 と同じキー変数の順序と名前が設定されています。

参考

|

関連する例

詳細