次の節では、JMPの[結合(Join)]コマンドの使用例について説明します。
行番号に基づいてテーブルを結合すると、2つのテーブルは横に並べて結合されます。新しいテーブルには、特定の列だけを含むように指定しない限り、両方のテーブルからのすべての列が含まれます。
行数の異なるテーブルを結合するには
行数が異なる2つのテーブルを結合すると、新しいテーブルには、両方のテーブル内の行の値がすべて含まれます。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Species1.jmp」と「Species2.jmp」を開きます。
「Species1.jmp」テーブルには2つ、「Species2.jmp」テーブルには4つの行があります。
2. 「Species1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Species1'と結合するテーブル」で「Species2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [OK]をクリックします。
図6.21 行番号によるテーブルの結合
2行のテーブルと4行のテーブルを結合すると、新しいテーブルは4行になります。
同じ名前の列があるテーブルを結合するには
2つのテーブルに同じ名前の列がある場合、新しいテーブルでは、これらの列の名前は「テーブル名の列名」となります。たとえば、Figure 6.22に示す「Trial1.jmp」と「Trial2.jmp」の各データテーブルから8つの行を1つのテーブルに結合するとします。新しいテーブルに、両方のテーブルからのすべての列が含まれるように結合します。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Trial1.jmp」と「Trial2.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」で「Trial2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [OK]をクリックします。
図6.22 元のテーブルと結合後のテーブル
元の2つのテーブルで、列名が同じ場合があります。その場合、出力テーブルの列名には元のテーブルの名前が付加されます。たとえば、新しいテーブルの列名は「テーブル名の<変数名>」というように表示されます。
指定した列だけを結合するには
元のテーブルの列をすべて結合後のテーブルに含める必要がない場合もあります。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Trial1.jmp」と「Trial2.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」で「Trial2」を選択します。
4. 「対応の指定」で、[行番号で対応]を選択します。
5. [テーブル結合のために列を選択]をクリックし、結合後のテーブルに含める列を指定します。
6. 「元の列」の「Trial1」リストから「コーンの種類」と「収率」を選択し、「Trial2」リストから「収率」を選択します。
両方のテーブルで「コーンの種類」列のデータは同一であるため、いずれか片方の列だけを選択すれば十分です。
7. [選択]をクリックします。
8. [OK]をクリックします。
図6.23 指定した列だけを結合
直積で結合すると、2つの元のデータテーブルの行の可能な組み合わせがすべて含まれた新しいテーブルが作成されます。出力テーブルには、列の値の組み合わせごとに1行が作成されます。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Species1.jmp」と「Species2.jmp」を開きます。
2. 「Species1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Species1'と結合するテーブル」で「Species2」を選択します。
4. 「対応の指定」で、[直積]を選択します。
5. [OK]をクリックします。
図6.24 直積を使ったテーブルの結合
「Species1.jmp」のデータと「Species2.jmp」のデータを組み合わせて新しいテーブルが作成され、値のすべての組み合わせがセットで表示されます。
この例では、[テーブル]>[結合(Join)]コマンドを2回使います。
• 最初の結合では、[直積]オプションを使って、「Oil Amount.jmp」テーブルを「Batch.jmp」テーブルと組み合わせます。
• 2番目の結合では、結果のテーブル(「Oil Amount+Batch」)と「Popcorn Type.jmp」テーブルを組み合わせて、すべてのテーブルを結合した最終的なテーブルを作成します。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Oil Amount.jmp」、「Batch.jmp」、および「Popcorn Type.jmp」を開きます。
2. 「Oil Amount.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Oil Amount.jmp'と結合するテーブル」で「Batch」を選択します。
4. 「対応の指定」で、[直積]を選択します。
5. 「出力テーブル名」に「Oil Amount+Batch」と入力します。
6. [OK]をクリックします。
図6.25 結合後の「Oil Amount+Batch」テーブル
結合後のテーブルには、「Oil Amount.jmp」テーブルと「Batch.jmp」テーブルの列がすべて含まれています。「Popcorn Type.jmp」の列を追加します。
7. 前の手順で作成した「Oil Amount+Batch」テーブルから、[テーブル]>[結合(Join)]を選びます。
8. 「'Oil Amount+Batch'と結合するテーブル」で「Popcorn Type」を選択します。
9. 「対応の指定」で、[直積]を選択します。
10. [OK]をクリックします。
図6.26 「Oil Amount+Batch」と「Popcorn Type」の結合
最終的なテーブルには、3つのテーブルの列がすべて含まれています。直積で生成される行数は、元のテーブルの行数の積になります。
対応する列でデータテーブルを結合する場合、JMPはそれらの列の値を照合することによって2つのテーブルの行を揃えます。
注意: これらの列に一意でない値が含まれている場合は、注意して操作を進めてください。
メモ:
• 対応する列のデータタイプ(数値、文字、または行の属性)は同じでなければなりません。
• データテーブルから重複する値(行)を削除するために、データテーブルをそのテーブル自身に結合するという使い方もできます。
• 新しいデータテーブルを作成する代わりに、仮想結合を使用するという方法もあります。データテーブルの仮想結合を参照してください。
一意のIDを含むテーブルを結合するには
ホットドッグに関する情報を含む2つのファイルがあります。2つ目のファイルには「サイズ」という列がありますが、1つ目のファイルにはその列はありません。対応する列の値によって、これらのデータテーブルを結合してみましょう。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Hot Dogs.jmp」と「Hot Dogs2.jmp」を開きます。
「製品名」は、データテーブル内の各行で一意の値を持っています。2つのテーブルには、それぞれ54個の製品名があります。
2. 「Hot Dogs」データテーブルで、[テーブル]>[結合(Join)]を選択します。
3. 「‘Hot Dogs’と結合するテーブル」リストで、「Hot Dogs2」を選択します。
4. 「対応の指定」で、[対応する列の値で結合]を選びます。
5. 「Hot Dogs」リストと「Hot Dogs2」リストで、それぞれ「製品名」を選択します。
6. [対応]をクリックします。
7. 「オプション」枠内の[同名の列をマージ]チェックボックスをオンにします。[同名の列をマージ]チェックボックスをオンにすると、[対応フラグ]チェックボックスも自動的にオンになります。
8. ウィンドウの左下隅にある[ダイアログを開いたままにする]チェックボックスをオンにします。これで、期待通りの結果が得られなかったときに、「結合(Join)」ウィンドウに戻りやすくなります。
9. [適用]をクリックします。
図6.27 対応する列の値で結合したテーブル
出来上がったテーブルには、「Hot Dogs2」テーブルにあった「サイズ」列が含まれています。「対応フラグ」列を見ると、どの行のデータも、両方のテーブルにあったことがわかります。
異なる行数と列名を持つテーブルを結合するには
サラとジョーは、それぞれポップコーンの実験に取り組んでいます。異なる種類のコーン(グルメとプレーン)を油の量を変えてポップし、でき上がったポップコーンの量(収率)を記録しています。サラは、実験データを「Trial1.jmp」というファイルに、ジョーは、実験データを「Little.jmp」というファイルに保存しました。この2つのテーブルを1つのテーブルに結合してみましょう。
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Trial1.jmp」と「Little.jmp」を開きます。
2. 「Trial1.jmp」テーブルから、[テーブル]>[結合(Join)]を選びます。
3. 「'Trial1'と結合するテーブル」ボックスで、「Little」を選択します。
両方のテーブルで、3つの列(「コーンの種類」、「油の量」/「油」、「一回にポップする量」)に記録されている値は同じです。これらの列を対応列として指定します。また、サラとジョーは油の量に関する列に「油の量」と「油」という異なる名前を使っているため、これらを対応列として指定します。
4. [主テーブルの順序を保存]の選択を解除します。
結合後のテーブルは、「Trial1.jmp」でのデータの順ではなく、対応する列で並べ替えられます。
5. 「対応の指定」で、[対応する列の値で結合]を選びます。
6. 「Trial1」リストから「コーンの種類」、「油の量」、「一回にポップする量」を選択します。
7. 「Little」リストから「コーンの種類」、「油」、「一回にポップする量」を選択します。
8. [対応]をクリックします。
2つのデータテーブルを見比べてみると、行数が違うことがわかります。「Trial1.jmp」には8通りの実験条件の組み合わせが揃っていますが、「Little.jmp」には4通りの実験条件の組み合わせしかありません。サラの実験は完了していますが、ジョーの実験はまだ途中です。「Little.jmp」テーブルにはない実験条件の組み合わせも含め、「Trial1.jmp」のすべての行を結合後のテーブルに含めるとします。
9. 両方のテーブルの[一致しない行も含める]チェックボックスをオンにします。
結合後のテーブルには、「コーンの種類」、「油の量」、「一回にポップする量」を、それぞれ1列ずつ含めます。ただし、「収率」については、「Trial1.jmp」と「Little.jmp」のそれぞれの「収率」を表す列を2つ含めます。
10. [テーブル結合のために列を選択]チェックボックスをオンにします。
11. 「Trial1」リストで、すべての列を選択します。
12. [選択]をクリックします。
13. 「Little」リストから「収率」を選択します。
14. [選択]をクリックします。
図6.28 設定後の「結合(Join)」ウィンドウ
15. [OK]をクリックします。
結合後のテーブルは、対応する列で並べ替えられています。「Little.jmp」テーブルの「収率」列(「Littleの収率」)で、「Trial1.jmp」テーブルと一致する値のないセルは欠測値になっています。
テーブルをそのテーブル自体に結合するには(重複行の削除)
1. [ヘルプ]>[サンプルデータフォルダ]を選択し、「Coffee Shop Purchases.jmp」を開きます。
一部の顧客が同じ日に同じ飲料を購入した記録があります。これらの重複行を[結合(Join)]を使って削除します。
2. [テーブル]>[結合(Join)]を選択します。
3. 「'Coffee Shop Purchases'と結合するテーブル」ボックスで、「Coffee Shop Purchases」を選択します。
4. 「対応の指定」で、[対応する列の値で結合]を選びます。
5. 両方の「Coffee Shop Purchases」リストで、すべての列(「日付」、「顧客」、「飲料」)を選択します。
6. [対応]をクリックします。
7. 両方のテーブル(「主テーブル」と「結合するテーブル」)の「重複する行を削除」のチェックボックスをオンにします。
8. 「出力テーブル名」に「Coffee Shop Purchases Final」と入力します。
9. [OK]をクリックします。
図6.29 結合前と結合後の「Coffee Shop Purchases」データテーブル