JSL を使用して 1 つ以上の空の値を含む行を削除する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />各行に 3 つの温度での単一の測定タイプが含まれ、それぞれが独自の列に格納されているテーブルがあります。 最終的には、これらの測定値間のデルタを計算し、そのデータを新しいテーブルに積み重ねたいと考えています。 ただし、すべての測定値が 3 つの温度すべてで取得されるわけではないため、1 つ以上のデータ列が空である測定値 (行) を除外する必要があります。 これは、JMP 9.0 スクリプトを使用して行う必要があります。
与えられる:
dtSplit =
| 測定 | T1 | T2 | T3 |
|---|
| 測定A | 5 | 12 | 89 |
| 測定B | 13 | | 8 |
| 測定C | | 52 | 57 |
| 測定D | 22 | 21 | |
| 測定E | 8 | | |
| 測定F | | | 15 |
| 測定G | | 54 | |
生成する必要があります:
dtクリーン =
私は次のようなものを使用しようとしていました:
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
ただし、Select Where(Is Empty(:COL)) では常にすべての行が選択されます。
単純な何かが欠けていると思います。ご協力をよろしくお願いいたします。ありがとうございます。
- マット
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するこんにちは
ご意見ありがとうございます。 あなたが推奨した欠落データパターンを確認しました。ある程度は機能しますが、完全には機能しません。
私のデータテーブルには、それぞれの名前に 4 つの異なる行があります。 名前の 4 行はそれぞれ 1 つのテスト (センス、マスク、EVM、パワー) の結果です。
私のデータ テーブルの例では、デバイス A は最初のテスト「Sens」に不合格ですが、2 番目、3 番目、および 4 番目のテストに合格しています。 デバイス A は「Sens」に不合格であるため、2 番目、3 番目、および 4 番目のテストに合格したとしても、これは不合格デバイスになります。
Tables==>Missing Data Pattern を使用すると、A の 2 行目、3 行目、4 行目が削除されます。 それは私が探しているものではありません。 データがない場合(10 MHz、20 MHz、30 MHz、1000 MHzのデータがない)、各名前の4行を削除したいと考えています。 データ テーブルでは、C、G、H、I、JK、N という名前が削除されます。
助けてくれてありがとう
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するMissing Data Pattern プラットフォームを調べる必要があります形状。これにより、欠損値が含まれるすべての行を識別し、行の削除などを選択できるようになります。
テーブル==>欠損データ パターン
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するこんにちは
これは私の最初の投稿であり、添付された Excel ファイルが通過するかどうかわかりません。 そうでない場合は、
サンプルデータファイルのPNGも添付します
私は JMP を初めて使用するため (JMP 14 を使用しています)、行削除スクリプトに関するヘルプが必要です。
私のデータテーブルには、各デバイスがテストされる多くの異なるデバイスのデータが含まれています
広い周波数範囲にわたる 4 つの異なる障害 (感度、マスク、EVM、電力)
10MHzから1000MHzまで。 通過するデバイスは、4 つすべてに空のセル「」があるデバイスです。
周波数範囲全体でテストを行っているため、データテーブルからそれらを削除したいと考えています。
(添付された Excel ファイルの緑色の行を削除します - デバイス C、G、H、I、J、K、および N)
第 1 の問題: 空の行を削除する方法 (列が 10 MHz ~ 1000 MHz = 空)
私が見つけた以下のコマンドは似ていますが、100の異なる列と「and」があるため役に立ちません。
すべてを実行すると非常に長くなり、後で頻度を増やすことにした場合には拡張性がありません。
1000MHzを超える
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << 行を削除;
このコマンドも試してみました:
For( i = 2、i <= 101、i++、
dtSplit << select where( Is Missing( Column( i )[] ) ) << 行を削除
);
このコマンドではエラーが発生します。
次のスクリプトでは、/*###*/ でマークされたエラーが発生します。
dt = 現在のデータ テーブル();
For( i = 2、i <= 100、i++、
dtSplit/*###*/ <);
2 番目の問題: 各デバイスは 4 回テストされるため、削除される行は 4 の倍数でなければなりません。
それをどのように行うか正確にはわかりません
ご協力をよろしくお願いいたします
ありがとう
new_2_JMP
Re: JSL を使用して 1 つ以上の空の値を含む行を削除する単一のセルのみをチェックする場合:
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するコードは行 7 のみをチェックしています。各行をテストする必要があります。
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するこんにちは、
私も少し同じことをしようとしています。
セルが空かどうかを確認し、空の場合は行を削除する必要があります。
私は次のことを試しました -
dt << select where( Is Missing( Column( dt,"Value" )[7] ) ) << 行を削除します。
ただし、テーブル内のすべての行が削除されます。
アイデアを探しています。
Re: JSL を使用して 1 つ以上の空の値を含む行を削除する素晴らしい議論です。 同様の問題があり、センサー ファイルからインポートすると、ファイルの最後に多くの空の行ができました。 センサー データが存在しない行を削除したいと考えていました。 ただし、まだ情報が残っている行は削除したくありませんでした。以下は JMP14 で書かれていますが、以前のバージョンでも動作すると思います。 JMP14 には、[行の選択] > [重複する行の選択] があることはわかっています。 しかし、1 行のすべての数値列を合計する同様の関数は見つかりませんでした。 以下のスクリプトでは、Sum() は行列内の行全体で null を返しますが、私はゼロが必要でした。 V Sum() の出力がすべての null に対して 0 を返すことがわかりました。 これを機能させるには、行ベクトルを列ベクトルに転置するだけで済みました。これは、数値列がいくつあっても、すべて空である限り機能します。 誰かがより良い解決策を持っているなら、まだ興味があります。
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Re: JSL を使用して 1 つ以上の空の値を含む行を削除する連結演算子の使用は転写エラーでした。古い習慣は根強く残っています。
問題は列名であり、実際には「88」、「95」、「105」であり、Is Missing(:88) を使用するとすべての行が選択されたことがわかりました。
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
よく働く。
Re: JSL を使用して 1 つ以上の空の値を含む行を削除する文字列連結演算子 || を使用していました。 OR 演算子 | の代わりに。MS が示したように、Is Empty ではなく Is Missing 関数を使用する必要があります。コードは次のようになります。
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Re: JSL を使用して 1 つ以上の空の値を含む行を削除する申し訳ありませんが、JMP9 の要件を見逃していました。 Loc Nonmissing() 関数は JMP 10 の新機能と思われるため、上記の関数は JMP 9 では機能しません。
これは、JMP 9 で機能する代替アプローチです。コードに似ていますが、ループを使用します。
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Re: JSL を使用して 1 つ以上の空の値を含む行を削除するこれはさまざまな方法で実現できます。 数値列の場合、多くの場合、行列関数が効果的です。
以下は、列 2、3、および 4 に欠落しているセルを含むすべての行を削除する例です。
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
以下は、欠落セルのない列のサブセットを作成する別のアプローチです (元のテーブルを変更しないままにします)。
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Re: JSL を使用して 1 つ以上の空の値を持つ行を削除しますこのスクリプトは、「名前」というタイトルの列の後で動作を開始し、空の行を削除しながらテーブルの最後まで動作を続けます。
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);