データセット配列の結合
この例では、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 つのデータセット配列 ds1
と ds2
をマージし、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 つのデータセット配列の観測をリンクする配列) となり、ds1
と ds2
で同じ変数名を使用しているためです。
不完全な観測をマージの対象にします。
ds1
と ds2
をマージし、大きい方の 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
と同じキー変数の順序と名前が設定されています。