JSL を使用してマトリックス分岐の途中でデータを分類および要約し、マトリックスの形式で要約結果を取得するにはどうすればよいですか?「Big Class.jmp」の場合、「身長」列と「体重」列がマトリックスに書き込まれます。
次に、行列の行 6 ~ 35 のデータが分類され、要約されます。つまり、各身長の平均体重が要約されます。この結果は、メモリ内の行列に保存するだけで済みます。

専門家に感謝します!
dt=Open("$SAMPLE_DATA/Big Class.jmp");
ar=dt<<GETASMATRIX></GETASMATRIX>
高度な統計モデリングコンテンツの構成データの探索と視覚化結果の共有と伝達Re: JSL を使用して行列分岐の途中でデータを分類および集計し、集計結果を行列の形式で取得するにはどうすればよいですか?編集:
以下のコードの元のバージョンにタイプミスがあることに気づきましたので、修正しました。 最後の行のタイプミスは次のとおりです。
狭い
代わりに、以下を使用します。
狭い(h)
もちろん、ベクトル h、n、m の行数が同じであるため、nrow (n) または nrow(m) も機能します。
ごめんなさい。
乾杯、
ブレイディ
/////////////////////////////元の投稿:
テーブルベースのアプローチのパフォーマンスを調べてみると、テーブルによっては行列ベースのアプローチよりもはるかに遅いため、その単純さが相殺される可能性があります。
ここでは、別のマトリックスベースのアプローチを示します。これは Ian が投稿したものと同様に機能しますが、私がこれを含める理由はいくつかあります。a) 行が選択されている場合は 1、選択されていない場合は 0 にフラグを立てる「選択された」列のアイデアを導入するため、b) Summary 関数の「ハック」を示すため、c) これによりループとそれに関連する潜在的なインデックス作成の落とし穴が回避されるためです。
1 つ目は「選択済み」列です。 以下のコードの最初の行では、テーブルに新しい列を追加します。これにより、選択された行では 1 が設定され、その他の行では 0 が設定されます。 これにより、新しいテーブルを作成することなく、テーブルベースのプラットフォームや、概要や集計などの関数を使用することを目的として、追加のグループ化列を作成できるようになります。
次に、Summarize () ハック: :selected と :height でグループ化していることに注意してください。 h、n、m の値は行列で返されますが、by 変数の値は、行列に配置できたとしても、文字列のリストに配置されます。 したがって、この場合、 b は 2 つの文字列リストのリストです。 したがって、これらの値のいずれかを行列形式で必要な場合は、必要な文字列のリストを行列に変換するか (リストが大きい場合はコストがかかります)、またはまったく同じ列で Min や Max などの「安価な」統計を計算してそれらの値を取得することができます。これは、以下で高さ列に対して行うことです。
乾杯、
ブレイディ
dt << New Column( "Selected", formula( Selected( Row State() ) ) );
dt << Select Rows( 6 :: 35 );
Summarize( dt, b = by( :Selected, :height ), h = max( :height), n = Count( :weight ), m = Mean( :weight ) );
sumMat = (h || n || m)[contains(b[1], "1"):: nrow(h),0]; //only use the results where selected == 1
Re: JSL を使用して行列分岐の途中でデータを分類および集計し、集計結果を行列の形式で取得するにはどうすればよいですか?ここでは、目に見えないテーブルが作成されるものの、ループを回避するアプローチを示します。 パフォーマンスがニーズを十分に満たしている場合、このアプローチは使いやすく、理解しやすいです。
乾杯、
ブレイディ
dt = open("$Sample_Data/Big Class.jmp");
dtSub = dt << subset(rows(6::35), invisible);
dtsum = dtsub << summary(group(:height), mean(weight), invisible);
mat = dtSum << get as Matrix;
close(dtSum, nosave);
close(dtSub, nosave);
show(mat);Re: JSL を使用して行列分岐の途中でデータを分類および集計し、集計結果を行列の形式で取得するにはどうすればよいですか?イアンさん、ありがとう! これがこのサイクルの仕組みです。
ar=dt<<GETASMATRIX></GETASMATRIX>
Re: JSL を使用して行列分岐の途中でデータを分類および集計し、集計結果を行列の形式で取得するにはどうすればよいですか?それが最終結果を得る最良の方法であるかどうかはわかりませんが、行列だけを使用してそれを実行したい場合は、次のようにすることができます。
NamesDefaultToHere(1);
// Sample data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Matrix with all 'height' and 'weight' values
ar = dt << GetAsMatrix({4,5});
// Discard rows
ar = ar[6::35, 0];
// Find out the distinct levels of 'height'
hl = Matrix(AssociativeArray(ar[0,1]) << getKeys);
// Build the average 'weight' for each level into a new matrix 'rm'
rm = J(NRow(hl), 2, .);
for(h=1, h<=NRow(hl), h++,
rm[h, 1] = hl[h];
rm[h, 2] = VMean(ar[Loc(ar[0, 1] == hl[h]), 2]);
);
Print(rm);