サブセット列で式を実行するより大きなテーブルのサブセットテーブルを作成するスクリプトを作成しましたが、正しく動作しません。 私の目標は、サブセット テーブルに含める列をユーザーに選択させ、新しいテーブルにデータを配置する前にスクリプトで列に対して数式を実行させることです。これまでのところ、私のスクリプトはユーザー対話用のダイアログ ボックスを表示しますが、ダイアログ ボックスで列を選択すると、それらはサブセット テーブルに表示される列ではありません。 それのどこに問題があるのかわかりません。 (注: ユーザーはサンプル情報ではなく、データが含まれる列を選択します。つまり、この例では、列名が「列 10...」で始まる列です。)
さらに、どこに数式を挿入すればよいのかわかりません。 基本的に、ユーザーがダイアログ ボックスから選択する列には < 記号が付いているセルがいくつかあります。新しいサブセット テーブルの場合、未満記号のないセルはゼロになり、< 記号のあるセルには < 記号が付きます。削除され、サブセット テーブルの横の数字のみが配置されます。 したがって、新しいサブセット テーブルには、検出された値にはゼロが含まれ、検出されなかった化合物には検出限界が含まれています。
これまでの私のスクリプトは次のとおりです。
Names Default To Here( 1 );
dt = Data Table("Example Data");
col_dlg = new window("Column Select",
panelbox("Select columns to create NonDetect table with",
col_clist = collistbox(all, width(200)),
buttonbox("Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset(Output Table("NonDetect"),columns(col_clist));
col_dlg << close window;
)
)
);助けていただきありがとうございます!
Re: サブセット列で数式を実行するディスカッション コミュニティへの貢献者に報酬を支払うチャンスです。経験豊富なユーザーとしてスクリプト ガイドとスクリプト インデックスを詳しく調べ、参加することで恩返しをしましょう。
Re: サブセット列で数式を実行するそれはうまくいきました! 大変お時間をいただき、誠にありがとうございました。 本当に感謝しています!
レイシー
Re: サブセット列で数式を実行するSubstr() 関数が選択された行では機能しないことが判明したので (理由はわかりません)、コードを少し変更してテストしました (明らかに最後のバージョンをテストしていませんでした)。
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select all of the currently non selected columns and unselect the current ones
dt2 << select where( Contains( As Column( dt2, selected_column_list[i] ), "<" ) == 0 );
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows] = "0";
// Find the rows with the "<" in them
dt2 << invert row selection;
selRows = dt2 << get selected rows;
//selRows= dt2 << Get Rows Where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
For( k = 1, k <= N Rows( selRows ), k++,
Column( dt2, selected_column_list[i] )[selRows[k]] = Substr( As Column( dt2, selected_column_list[i] )[selRows[k]], 2 )
);
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) << modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: サブセット列で数式を実行する(を間違った場所に入れてしまったのでしょうか? 今私が持っているものはこれです。
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] =
substr(As Column( dt2, selected_column_list[i] ),2);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: サブセット列で数式を実行する早速の対応、ありがとうございました! 2を試しましたが、検出された値からゼロが表示され、<記号が含まれるセルには空白が表示されます。 1と同じ結果が得られます。
Re: サブセット列で数式を実行するおっと....私のエラー。substr()関数の「1」を「2」に変更すると修正されるはずです
Re: サブセット列で数式を実行する2 番目のテーブルに送信した 2 番目のコードは機能していないようです。 数時間を費やしてさまざまなことを試しました。 (が2つ抜けていることに気づきました。 これにより、コードはエラーなしで実行できましたが、コードの「<」記号を削除した部分が正しく動作していないようです。 コードのビットを削除すると、テーブルは検出された値が 0 になり、ND 値はそのままで、< 記号が付きます。 いろいろいじってみましたが、まだわかりません。 手がかりはありますか? 
ありがとう!
Re: サブセット列で数式を実行する2番目のケースを処理するコードは次のとおりです
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] =
substr(As Column( dt2, selected_column_list[i] ),1);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Re: サブセット列で数式を実行するこれは Detect テーブルではうまく機能するので、2 番目のテーブルではゼロになる値を切り替えたいので、このアプローチは機能しないと思います。 < 記号が付いているセルを保持し、残りのセルをゼロにしたいと思います。 次に、< 記号を削除して数値のみを残したいと思います。 私の頭の中では、上記のようにループを実行してから、if/else ステートメントを追加することになると思います。
そして、if/else ステートメントを投稿していただきありがとうございます。 私の問題は、else の列名の前に num() がないことでした。
Re: サブセット列で数式を実行するここでは、良いアプローチとして考えられるスクリプトの変更を示します。あなたがやりたいこととして私が解釈するのは、選択した文字列の値を含む数値列を作成することですが、値に「<」記号が含まれている場合は、それらのエントリをゼロ(0)にすることです。以下のスクリプトは、新しい列を作成せずにこれを実行します。列を数値に変換し、「<」セルをゼロに設定します。
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Change the column to numeric/continuous
// The names in the data table are very complex, containing symbols, etc.
// that JMP will confuse as operators. Therefore, using the Column()
// function, or a :Name(" ") function to wrap around the column name
// needs to be used
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
// Now find all of the rows in the table that have Missing Values
// in the target column, and then set them all to "0" in one
// statement
Column( dt2, selected_column_list[i] )[dt << get rows where(
Is Missing( As Column( dt2, selected_column_list[i] ) )
)] = 0;
);
col_dlg << close window;
)
)
);
前回の回答で示したように、新しい列を作成して数式を設定できます。あなたが提供したものに関して発生している問題は、複雑な列名を扱うことです。 これがどのように機能するかです
If( Contains( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ), "<" ),
0,
Num( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ) )
)
Re: サブセット列で数式を実行するそこが私の悩みの種だと思います。私は Excel に非常に堪能で、9 年間すべてのデータ分析を Excel で行ってきました。 私はちょうど移行しようとしているのですが、jmp の if/then ステートメントに(とりわけ)苦労しています。 エクセルで書きますので、手伝っていただけないでしょうか?
これらのサブセット テーブルを 2 つ作成します。 1 つは検出された値用、もう 1 つは検出されなかった値用です。 検出された値に対して、=if(isnumber(J2),J2,0) のような if/then ステートメントを実行します。 検出されない値については、=if(isnumber(J2),0,J2) のようなことを行います。
JMPでそれを切り替えようとしていた
もし(含まれています(:カラム 10 1,2,3,4,6,7,8-HpCDD 、 「<」 )、 0 ,:カラム 10 1,2,3,4,6,7,8-HpCDD )
しかし、自分で列を作成して数式を挿入しても機能しないようです。
基本的に、スクリプトには 2 つの部分 (NonDetect テーブル用と Detect テーブル用) を含めます。また、if then ステートメントを使用して列をそのように変換したいと思います。 最終的に、2 つのデータ テーブルを R に送信し、NonDetect サブセットに残っている DL を使用して非検出値を代入します。 それで説明がつくといいのですが?
Re: サブセット列で数式を実行する計算したい式は何ですか?本当に新しい列を作成する必要があるのでしょうか?これは Excel ではないことに注意してください。値や結果を生成するために、それらを列に配置する必要はありません。他の構造もあります。あなたがやりたいことをもっと詳しく説明していただけますか?
Re: サブセット列で数式を実行するああ、それはうまくいきます。
新しいテーブルにデータを配置する前に、データの数式を完成させる方法はありますか? そうでない場合は、サブセット テーブルに新しい列を作成し、新しい列で計算を完了してから、(スクリプトを使用して) 元の列を削除することを考えました。 これを行うより効率的な方法はありますか?
ありがとう!
Re: サブセット列で数式を実行するSelected_column_list に配置した表示オブジェクトの内容ではなく、col_clist を参照していました。
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
col_dlg << close window;
)
)
);