一致した列と最も近い一致列に基づいてテーブルを結合するこんにちは、
2つのテーブルを結合したいです。
2 つの列に完全一致があり、他の 2 つの列に最も近い一致があります。
各テーブルには異なる行数があります。
参照ソート = 108 行
スキャンソート = 193 行
最終テーブルには、参照テーブルのすべての行 (108 行) と、2 番目のテーブルからの一致するデータが含まれるようにします。
完全一致列:
1. 行参照 = 行スキャン
2. 列参照= 列スキャン
最も近い一致列:
1. X座標参照=X座標スキャン
2. Y座標参照= Y座標スキャン
可能であれば、検索領域などの近接値を制御したいと思います。
フォーラムで他の提案(あいまいマージと最も近い行)を試しましたが、希望する結果が得られませんでした。
ご協力いただければ幸いです。
自動化とスクリプト基本的なデータ分析とモデリングデータのブレンドとクリーンアップRe: 一致した列と最も近い一致列に基づいてテーブルを結合する希望する結果の例を挙げていただけますか?
Re: 一致した列と最も近い一致列に基づいてテーブルを結合するこんにちは、
これは私が望む結果の例です。
14行目、15行目 -
検索範囲を設定するオプションがある場合(たとえば 30)、この行には一致がなく、参照テーブル データのみが表示されます。
ただし、検索範囲に関係なく最も近い結果を取得すると、提供された表のような結果が表示されます。
明確であることを願う
Re: 一致した列と最も近い一致列に基づいてテーブルを結合するこれは何かヒントになるかもしれない
Names Default To Here(1);
dt_scan = Open("$DOWNLOADS/scan sorted.jmp");
dt_ref = Open("$DOWNLOADS/reference sorted.jmp");
dt_scan << clear select << Clear Column Selection;
dt_ref << clear select << Clear Column Selection;
dt_res = dt_ref << Join(
With(dt_scan),
By Matching Columns(:Col_Reference = :Col_Scan, :Row_Reference = :Row_Scan),
Drop multiples(0, 0),
Include Nonmatches(1, 0),
Preserve main table order(1),
Output Table("Join of reference sorted with scan sorted")
);
dt_res << New Column("Distance", Numeric, Continuous, Formula(
Sqrt(
(:X_Coordinates_Scan - :X_Coordinates_Reference)^2
+
(:Y_Coordinates_Scan - :Y_Coordinates_Reference)^2
);
));
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
dt_res << Invert Row Selection;
dt_res << Delete Rows;Re: 一致した列と最も近い一致列に基づいてテーブルを結合する早速の返信ありがとうございます。
これは素晴らしいです。
ステートメントを追加しようとしました - if :Distance <30 の場合は結果を表示せず、参照のみを表示します。
しかし、距離が30を超える場合は結果が得られずに終了しました。
この条件を追加するオプションはありますか?
Re: 一致した列と最も近い一致列に基づいてテーブルを結合するどうやって追加しようとしましたか?
スクリプトはまず、各グループと結合できなかった行の最小距離を持つ行を選択します。
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
次に選択範囲を反転し、反転した行を削除します
dt_res << Invert Row Selection;
dt_res << Delete Rows;
選択条件を変更して反転なしで動作するようにするか、距離制限で反転をどのように考慮するかを検討することができます。