現在のテーブルからの重複行の削除やあ、
現在、親テーブルに 256k 行あります。 いくつかの分析を行っているときに、重複する行がほとんどないことがわかりました。 このテーブルは、スクリプトによって修正された新しいデータを常に取得します。 また、ソース データが再び重複する可能性があります。
そのため、分析の一部を実行する前に実行できるクリーンアップ スクリプトを作成しようとしています。 ここで他の議論を検索し、解決策を見つけました( https://community.jmp.com/t5/Discussions/Eliminating-Duplicate-Rows-keeping-first-duplicate/td-p/3424 )、自分のアプリケーション用にカスタマイズしました
dt3 = Current Data Table();
dt2 = dt3 << Summary(
group(:CL1, :CL2, :CL3, :CL4)
);
dt3 << join(
with (dt2),
update,
by matching columns (
:CL1 = :CL1,
:CL2 = :CL2,
:CL3 = :CL3,
:CL4 = :CL5
),
drop multiples(1,0),
name("include non-matches")(0,0),
preserve main table order (1),
);
このソリューションは、私が探していたものを実行しました。 ただし、親テーブルを更新することはできません。 正しい行で新しいテーブルを作成しますが、親テーブルは変更されていません。 親テーブルでこのコードを使用して、親テーブルから行を削除するにはどうすればよいですか。この場合は「Currnet Data Table()」です。
また、(私はすでに知っていますが、確認したかったのですが)、データセットには 25 列あります。 上記のスクリプトを実行して 25 列すべてを正確に一致させる必要がありますか、それとも時間列がある限り、より少ない数の列 (上記の例では 4 など) を実行できますか? JMPファイルには大量のデータが含まれるため、スクリプトを遅くしたくありませんでした。
前もって感謝します!
Re: 現在のテーブルから重複行を削除するGZMORGAN0 さん、ありがとうございます。
あなたの方法論を使用して、重複を排除することができました。 DIF 式で新しい列を作成しました。 次に、スクリプトでソートされた時間列を使用して、ゼロを選択し (diff = 0 は重複行を意味します)、重複を削除します。Re: 現在のテーブルから重複行を削除するNiiD、
時間が主な識別子である場合、1 つのオプションは、新しい列を作成することです。 Dif(:日時,1)または、Dif(:Datetime,1) ==0 の行を取得します。重複する必要があります。 ただし、日時が同じでツールやその他の識別子が異なるレコードが存在する可能性がある場合は、それらの識別子と日時で並べ替えてから行を取得するか、識別子 == Lag(identifier,1) & Dif(:Datetime,1 ) ==0。 次に、それらの行を削除します。
Re: 現在のテーブルから重複行を削除するありがとう!あなたのコードを使用して、適応できるかどうかを確認します。
並べ替えを使用して、同じ行を隣り合わせに取得できる時間列があります。 他のすべての列は実際のプロセス データであるため、重複はありません (製品名、製品タイプなどのプロセス識別子を除く)。 ただし、時間列を使用してソートし、同じ行を隣り合わせにすることができます。問題は、同じ行の1つを選択することです。
JMP 14 には新しい機能があることがわかりましたが、それは JMP 13 (私のバージョン) ではサポートされていません。 したがって、重複する行 (2 つのエントリのうちの 1 つ) を選択する簡単なコードがあれば、簡単に削除できます。
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
重複の背景: 私のスクリプトは、毎週生成される CSV ファイルからデータを取得し、JMP マスター テーブルにインポートします。 週次データは、生成されてから 7 日経過しています。 したがって、1 週間の CSV が月曜日の午後 12:00 に生成され、翌週は月曜日の午前 8:00 に生成された場合、3 時間が重複する可能性があります。
データがJMPに入ったら、それを除外しようとしています。 JMPに到達する前に重複を排除する機能がないため、JMPでの解決を望んでいます。
Re: 現在のテーブルから重複行を削除するNiiD、
データに関する重要な情報が欠落しています: 一意のレコードを表す列が 1 つまたは複数ありますか。 例えば:
- 半導体のような多段階の製造ラインでは、通常、ロット番号、ウェーハ番号、オペレーション番号、装備 ID、日時の列を使用します。
- 反復測定薬物研究: 被験者 ID と日時
- 等
次に、これらの列が一意のレコード (キー) を表す必要がある場合、他の列は重要ではなく、最初のレコードと最後のレコードのどちらを保持するかを決定する必要があります。言い換えれば、テーブルの順序は重複に関する情報を提供していますか? たとえば、データベースは新しいものから古いものへと並べられることがよくあります。
添付のスクリプトは、256k の一意の行と 25 列のテーブルを作成します。 ランダムに 200 行を選択します。 2 番目の 100 が 2 回複製されると、最初の 100 が複製され、テーブルの順序がシャッフルされます。 これで、256,300 行になりました。
2 つの文字列列と 2 つの整数列で作成されたので、一意のキーを表す 4 つの列があります。そして、このスクリプトは、テーブルの最上位の行を保持します。 中間テーブルは、レンダリング時間なしでパフォーマンスをテストするために非表示に設定されています。 ただし、コードが何を行っているかを理解するために、コードを変換して表示したい場合があります。
これを 6 回実行しましたが、PC ではそれぞれ 2.0 秒かかりました。デュプの数によって時間は変動します。
スクリプトは、256k よりもはるかに小さい重複行のみを処理して、削除する行を見つけます。
最後のメモ。 これらの行をメイン テーブルから削除する代わりに、それらを除外するか、Keep または Save の列を維持して、rowstate をリセットして除外することができます。
幸運を!