2つのテーブルを掛け合わせるにはどうすればよいですかビッグデータテーブルと正規化係数テーブルがあります。
データテーブルは次のようになります。
| ID | タイプ | パラメータ1 | パラメータ2 | パラメータ3 |
| 01 | 1 | データ | データ | データ |
| 02 | 1 | データ | データ | データ |
| 03 | 2 | データ | データ | データ |
| 04 | 2 | データ | データ | データ |
正規化係数テーブルは次のようになります。
| タイプ | パラメータ1 | パラメータ2 | パラメータ3 |
| 1 | 正規化係数1 | 正規化係数2 | 正規化係数3 |
| 2 | 正規化係数4 | 正規化係数5 | 正規化係数6 |
タイプとパラメータに基づいて最初のテーブルに2番目のテーブルを掛けて、次のような新しいテーブルを取得するにはどうすればよいですか。
| ID | タイプ | パラメータ1 | パラメータ2 | パラメータ3 |
| 01 | 1 | データ*正規化係数1 | データ*正規化係数2 | データ*正規化係数3 |
| 02 | 1 | データ*正規化係数1 | データ*正規化係数2 | データ*正規化係数3 |
| 03 | 2 | データ*正規化係数4 | データ*正規化係数5 | データ*正規化係数6 |
| 04 | 2 | データ*正規化係数4 | データ*正規化係数5 | データ*正規化係数6 |
私の生データテーブルは行と列の両方で巨大なので、高速なソリューションが必要です。
どうもありがとうございました。
データ表スクリプティングRe:2つのテーブルを掛け合わせるにはどうすればよいですか仮想結合列と数式列を使用できます。
仮想結合により、青と金のキーが追加されます
それらをインタラクティブに、またはJSLとリンクできます。
これは、JMP16名を使用している可能性があります。 : "parameter3 [タイプ]" n構文;あなたは名前が必要かもしれません( 「parameter3 [Type]」 )代わりに。
// make example tables. **save them** so virtual join works.
factorDT = New Table( "Imported Data 2",
New Column( "Type", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) ),
New Column( "parameter1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1.1, 1.2] ) ),
New Column( "parameter2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0.8, 0.9] ) ),
New Column( "parameter3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1.1, 0.9] ) )
);
factorDT << save( "$temp/factor.jmp" );
dataDT = New Table( "Imported Data",
New Column( "ID", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "Type", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 1, 2, 2] ) ),
New Column( "parameter1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "parameter2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 3, 2, 1] ) ),
New Column( "parameter3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 3, 3, 2] ) )
);
dataDT << save( "$temp/data.jmp" );
// join the tables
factorDT:type << Set Property( "Link ID", 1 );
dataDT:type << Set Property( "Link Reference", Reference Table( "factor.jmp" ) );
// add formula columns
dataDT << New Column( "p 1", Numeric, "Continuous", Format( "Best", 12 ), Formula( :"parameter1[Type]"n * :parameter1 ) );
dataDT << New Column( "p 2", Numeric, "Continuous", Format( "Best", 12 ), Formula( :"parameter2[Type]"n * :parameter2 ) );
dataDT << New Column( "p 3", Numeric, "Continuous", Format( "Best", 12 ), Formula( :"parameter3[Type]"n * :parameter3 ) );
// force the evaluation to complete
dataDT<<RUNFORMULAS></RUNFORMULAS>
Re:2つのテーブルを掛け合わせるにはどうすればよいですかまた、数式が必要ない場合は、行列の要素ごとの乗算を検討できます。これは、「より良い」場合とそうでない場合があります。 私のMacBookでは、以下のコードは約15秒かかりました。
NamesDefaultToHere(1);
nr = 10000; // Number of rows
nc = 10000; // Number of Columns
dt1 = AsTable(J(nr, nc, RandomInteger(1, 20)));
dt2 = AsTable(J(nr, nc, RandomUniform(0, 1)));
m1 = dt1 << getAsMatrix;
m2 = dt2 << getAsMatrix;
dtFinal = AsTable(m1 :*</img> m2);
Re:2つのテーブルを掛け合わせるにはどうすればよいですかお返事ありがとうございます。 しかし、私は多くの列を持っており、列名は複雑です。 したがって、新しい列を作成するためのforループを作成したいと思います。 この声明について詳しく説明していただけますか?
Formula( :"parameter1[Type]"n * :parameter1 )
私はこのようなforループを書くことを考えています:
</CODE></PRE><PRE class="lia-code-sample language-markup"><CODE>colnames = dataDT << Get Column Names();
nc = ncols(dataDT);
DT = New Table("normalized", New Column("ID", values(dataDT:ID << get values)),
New Column("Type", values(dataDT:Type << get values)));
For(i = 3, i<= nc, i++,
DT << New Column( char( colnames[3]), Numeric, "Continuous", Format( "Best", 12 ), Formula( XXXX ) ));しかし、私は式を正しく構築する方法がわかりません。 それは私にエラーを与え続けます。 手伝って頂けますか?
ありがとうございました。
Re:2つのテーブルを掛け合わせるにはどうすればよいですかありがとう、それは小さなデータセットで動作します。 しかし、テーブル1には数百万の行があり、テーブル2には2つの行しかありません。 したがって、別の巨大なテーブルを作成することは避けたいと思います。 より良い解決策が見つからない場合は、この方法を試してみます。
Re:2つのテーブルを掛け合わせるにはどうすればよいですかループは簡単ではありません。私はこれがそれをするだろうと思います:
// make example tables. **save them** so virtual join works.
factorDT = New Table( "Imported Data 2",
New Column( "Type", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) ),
New Column( "parameter1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1.1, 1.2] ) ),
New Column( "parameter2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0.8, 0.9] ) ),
New Column( "parameter3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1.1, 0.9] ) )
);
factorDT << save( "$temp/factor.jmp" );
dataDT = New Table( "Imported Data",
New Column( "ID", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "Type", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 1, 2, 2] ) ),
New Column( "parameter1", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "parameter2", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 3, 2, 1] ) ),
New Column( "parameter3", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [2, 3, 3, 2] ) )
);
dataDT << save( "$temp/data.jmp" );
originalColumns = dataDT<<GETCOLUMNNAMES></GETCOLUMNNAMES>
- 仮想結合で非表示の列を追加する前に、元の列をキャプチャします
- 埋め込まれた引用符をエスケープするには、\! "を使用して式eを作成します
- 印刷ではなく、write()を使用して作業をデバッグします
- << RunFormulasは速度にとって重要です。列式のデフォルトのバックグラウンド評価は非常に遅くなります