JSLを使用して、マトリックスブランチの途中でデータを分類および要約し、要約結果をマトリックスの形式で取得するにはどうすればよいですか?JSLを使用して、マトリックスブランチの途中でデータを分類および要約し、要約結果をマトリックスの形式で取得するにはどうすればよいですか?

専門家に感謝します!
dt=Open("$SAMPLE_DATA/Big Class.jmp");
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);Re:JSLを使用して、マトリックスブランチの途中でデータを分類および要約し、要約結果をマトリックスの形式で取得するにはどうすればよいですか?ianありがとう! これがこのサイクルの仕組みです。
ar=dt<<GETASMATRIX></GETASMATRIX>
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を使用して、マトリックスブランチの途中でデータを分類および要約し、要約結果をマトリックスの形式で取得するにはどうすればよいですか?編集:
以下のコードの元のバージョンにタイプミスがあることに気づきましたが、これを修正しました。 最後の行のタイプミスは次のとおりです。
nrow(s)
代わりに、以下を使用してください。
nrow(h)
もちろん、ベクトルh、n、およびmのそれぞれの行数が同じであるため、nrow(n)またはnrow(m)も機能します。
申し訳ありません。
乾杯、
ブレイディ
/////////////////////////////元の投稿:
テーブルベースのアプローチのパフォーマンスを調べると、マトリックスベースのアプローチよりもはるかに低速であるため、テーブルによってはその単純さが相殺される可能性があります。
これは別のマトリックスベースのアプローチです。 Ianが投稿したものと同様に機能しますが、いくつかの理由でこれを含めます。a)行が選択されている場合は1、それ以外の場合は0にフラグを立てる「選択された」列のアイデアを導入するため、b)「ハック」を表示するため要約関数の "およびc)これにより、ループおよびそれに関連する潜在的なインデックス作成の落とし穴が回避されるためです。
最初:「選択済み」列。 以下のコードの最初の行で、テーブルに新しい列を追加します。これにより、選択した行では1に設定され、他の行では0に設定されます。 これにより、新しいテーブルを作成しなくても、テーブルベースのプラットフォームやSummaryやSummarizeなどの関数を使用することを目的として、追加のグループ化列を作成できます。
次に、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