グループ化された文字列データのモードの計算私は、列Aのモードを列Bでグループ化して計算しようとしました。Col Mode(:A,:B)関数を実行しましたが、列Aには文字列データが含まれているため、値は出力されませんでした。そこで、Mode(:A)文字列データでも最頻値を取得できます。問題は、グループ化の方法がわからないことです。どのように数式を構成すればよいでしょうか?
自動化とスクリプトグループ化された文字列データのモードの計算数式が必要ですか、それとも結果だけが必要ですか?
グループ化された文字列データのモードの計算jthiさん、返信ありがとうございます。
数式が必要です。データテーブルに書きたいのですが。
グループ化された文字列データのモードの計算最も簡単な方法は、新しい列を作成し、その列で値を数値に変換し(「再コード」→「ラベルをコードに変換」で可能です)、それを計算に使用することです。その後、「列プロパティのコピー」を使用して、「ラベル値」列プロパティをコピーできます。
また、文字列をサポートするために、Col Mode() 項目をウィッシュリストに追加します。
グループ化された文字列データのモードの計算つまり、追加の手順が必要になるということですね。承知いたしました。Col Mode() で文字列型の列もサポートしていただけると嬉しいです。よろしくお願いいたします。
グループ化された文字列データのモードの計算ここでウィッシュリスト項目を作成できます。例えば、追加の手順を処理するためのワークフローやスクリプトを作成することもできます。
おそらく数式でも可能ですが、どれほど効率的かは分かりません。これは:sex と:age の最頻値を取得するはずです。
As Constant(
score_indices = Associative Array(:sex) << get keys
);
score_indices[Col Mode(Col Score(:sex), :age)]

グループ化された文字列データのモードの計算そこにウィッシュリストを投稿しますので、よろしくお願いいたします。
「S」の列はどうやって作ったんですか?そのアイデアに興味があります!
グループ化された文字列データのモードの計算S の式を提供しました (JMP19 が必要です)。
Re: Calculating Mode for String Data with Grouping// データテーブルを取得
dt = Current Data Table();
// B列のユニークな値を取得(グループ化のため)
unique_groups = As List(dt:B<< Get As Matrix);
// 新しい列 "mother" を作成
dt << New Column("mother", Character, "Nominal");
// 各グループごとに処理を実行
For(i = 1, i <= N Items(unique_groups), i++,
// 現在のグループをフィルタリング
current_group = unique_groups[i];
Show(current_group);
subset_rows = As List(dt << Get Rows Where(:B == current_group));
Show(subset_rows);
Show(Type(subset_rows));
// A列のキーを取得
score_indices = dt:A[subset_rows] << Get As List;
Show(score_indices);
// グループ内の "mother" 列を更新
dt:mother[subset_rows] = If(
Is Missing(score_indices[Col Mode(Col Score(dt:A[subset_rows]))]),
score_indices[2],
score_indices[Col Mode(Col Score(dt:A[subset_rows]))]
);
);
B列のユニークな値を取得し、これを用いてグループごとに処理を行っています。
しかし、これではエラーが出力されます。「You need to input a scriptable object for Send.」。
何か知見があれば教えていただきたいです。
Re: Calculating Mode for String Data with Grouping// データテーブルを取得
dt = Current Data Table();
// B列のユニークな値を取得(グループ化のため)
unique_groups = As List(dt:B<< Get As Matrix);
// 新しい列 "mother" を作成
dt << New Column("mother", Character, "Nominal");
// 各グループごとに処理を実行
For(i = 1, i <= N Items(unique_groups), i++,
// 現在のグループをフィルタリング
current_group = unique_groups[i];
Show(current_group);
subset_rows = As List(dt << Get Rows Where(:B == current_group));
Show(subset_rows);
Show(Type(subset_rows));
// A列のキーを取得
score_indices = Associative Array(Set Unique(dt:A[subset_rows])); Show(score_indices);
// グループ内の "mother" 列を更新
dt:mother[subset_rows] = If(
Is Missing(score_indices[Col Mode(Col Score(dt:A[subset_rows]))]),
score_indices[2],
score_indices[Col Mode(Col Score(dt:A[subset_rows]))]
);
);
これでA列のキーを取得するところまでは解決することができました。
jthiさん、お騒がせしました。
Re: Calculating Mode for String Data with Grouping// データテーブルを取得
dt = Current Data Table();
process_nm = "A";
// B列のユニークな値を取得(グループ化のため)
unique_groups = dt:B << Get values;
// 新しい列 "mother" を作成
dt << New Column("mother", Character, "Nominal");
// 各グループごとに処理を実行
For(i = 1, i <= N Items(unique_groups), i++,
// 現在のグループをフィルタリング
current_group = unique_groups[i];
subset_rows = dt << Get Rows Where(:B == current_group);
// A列のキーを取得
score_indices = Associative Array(Set Unique(Column(process_nm)[subset_rows])) << get keys;
// グループ内の "mother" 列を更新
dt:mother[subset_rows] = Mode(Column(process_nm)[subset_rows]);
);
Calculating Mode for String Data with Grouping
・Col Mode()は文字列には対応していない
・Mode()は文字列に対応している
・Mode()はグルーピングに対応していない
【対策】
1.文字列を数値のように扱い、Col Mode()を使用する。
2.予め行を絞り込み、Mode()を使用する。
グループ化された文字列データのモードの計算次のような願いです。
:folded_hands: 要約と集計: 文字列の集計オプションを追加
この機能が実装されると、このタスクにテーブル/サマリー機能を使用できるようになります。