こんにちは。テーブル内の一部のデータを「初期化」するための数式を実装したいと思います。具体的には、テスト実行の最初の繰り返しの値を列内のすべての要素から減算したいと思います (繰り返し情報は別の列に含まれています)。
作業中の表を添付します。式は列「X_35」に統合されます。考え方としては、分析の最初の繰り返し (列 X_21) で取得された X_22 に含まれる値を各テストに割り当て、テスト条件でフィルタリングし、特に他の列 (X_5、X_7、X_8 など) で分離することです。その後、各行の差を適用し、最初の繰り返しからの各ポイントのオフセットを取得します。可能であれば、手動で値を入力せずに、列式を使用してソリューションを見つけたいと思います。
私はJMP 17を使用しています
ありがとう
コミュニティへようこそ。
あなたが何を求めているのか、ちょっと混乱しています。あなたのデータから私が見ているのは、
列 X_31 はデータの 8 つのレベルをそれぞれ定義し、列 X_21 の行の各グループには 1 から 980 までのサブグループ値があります。
おそらく、実行したいことは、X_21 の値が 1 ではない特定の行について、X_5、X_7、X_8 の値を調べ、列 X_22 の一致する値である X の初期値を見つけて、その値を列 X_22 の現在の行の値から減算することだと思います。
私は自分の評価に全く自信がありません。データを調べてみると、X_31 の初期値の各グループに対して、列 X_5、X_7、X_8 の組み合わせがはるかに多くあります。
提供されたデータ テーブルに現在表示されている、X_21 の値が 1 の場合に列 X_22 から X_35 の値がコピーされるという処理は、JMP では簡単に実行できます。他の行に何が必要なのか理解するのは困難です。行 7 と行 14 に期待される結果と、その結果を得るために実行した手順を提供していただければ、非常に助かります。
こんにちは。迅速なご返答ありがとうございます。説明が下手で申し訳ありませんが、解決するよりも説明するほうが複雑なのです。
概略図で試してみます。
目標は、「初期値」列を取得することです。この列には、各測定値について、テストの種類 (ここでは A または B として識別) に応じて最初の繰り返しに対応する値が含まれます。次に、単純な差分を使用して、最初の実験から 0 からシフトされた値を取得します。
他のメッセージで見た数式は、繰り返し回数を指定した if 条件を使用して「初期値」列を書き込む試みです。問題は、異なる繰り返し回数で同じ値を取得するために、他の条件に何を書き込むかということです。
改めて感謝申し上げます
列の式を使用して、必要なものを作成できます
As Constant( dt = Current Data Table() );
currentType = :Type;
theInitialValue = :Value[(dt << get rows where( :Type == CurrentType & :Repetition == 1 ))[1]];
:Value - theInitialValue;

この方法は機能しますが、55,000 を超えるデータ テーブルの場合、数式はあまり効率的ではありません。
より効率的な方法は、簡単なスクリプトを使用して初期値のみを含む新しいテーブルを作成し、そのテーブルを元のテーブルにマージすることです。これにより、一致するすべてのレコードに初期値が複製されます。
names default to here(1);
dt=
New Table( "Example2",
Add Rows( 8 ),
New Column( "Type",
Character,
Set Values( {"A", "A", "A", "A", "B", "B", "B", "B"} )
),
New Column( "Repetition",
Numeric,
Set Values( [1, 2, 3, 4, 1, 2, 3, 4] )
),
New Column( "Value",
Numeric,
Set Values( [4, 10, 8, 7, 6, 9, 5, 10] )
)
);
// Create a table with the initial values
dt << select where(:Repetition == 1 );
initialDT = dt << subset( selected rows(1), columns({:Type,:Value}));
// Rename column Value to Initial Value
initialDT:Value << set name("Initial Value");
// Merge the values back to the original table
dt << Update(
With( initialDT ) ,
Match Columns( :Type = :Type )
);
// Create a column that contains the difference
dt << New Column( "Difference",
formula( :Value - :Initial Value )
);

このような正規化手順をより頻繁に実行する場合は、 正規化 GUI を検討してください。
「最初の」値を減算する以外にも、「最後」、「N-1」、「中央値」、「平均」(後者は行の除外も考慮) などの多くのオプションが提供されます。
値を計算するか、入力列が更新されたときに値を自動的に更新する数式を使用するかを決定できます。
ありがとう!
現在、必要なすべての変数を使用してコードを実装しようとしていますが、現時点ではすべて動作しています。