基於匹配列和最接近匹配列連接表你好,
我想加入兩張桌子。
我在兩列上有完全匹配,在另外兩列上有最接近的匹配。
每個表格具有不同的行數。
參考排序 = 108 行
掃描排序 = 193 行
我希望最終表包含參考表中的所有行、108 行以及第二個表中的匹配資料。
精確匹配列:
1.行引用=行掃描
2. 列參考=列掃描
最接近的匹配列:
1.X座標參考=X座標掃描
2. Y座標參考= Y座標掃描
如果可能的話,我想控制近似值,例如搜尋區域。
我在論壇中嘗試了其他建議:模糊合併和最近的行,但沒有得到我想要的結果。
任何幫助將不勝感激。
自動化和腳本編寫基礎資料分析與建模資料混合與清理回覆:根據匹配列和最接近匹配列連接表您能提供一個您想要的結果的範例嗎?
回覆:根據匹配列和最接近匹配列連接表你好,
這是我想要的結果的範例。
對於第 14、15 行 -
如果有一個選項可以設定搜尋區域,例如 30,則該行將沒有符合項,並且僅顯示參考表資料。
但如果我們採用最接近的結果(無論搜尋區域如何),那麼我們將看到提供的表格中的結果。
希望清楚
回覆:根據匹配列和最接近匹配列連接表這可能會給出一些想法
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;回覆:根據匹配列和最接近匹配列連接表感謝您的快速重播。
這很好用。
我嘗試新增一條語句 - if :Distance <30 不顯示結果,僅顯示參考。
但最終沒有距離 >30 的結果。
是否可以選擇新增此條件?
回覆:根據匹配列和最接近匹配列連接表您是如何嘗試添加它的?
腳本首先選擇每個群組和無法連接的行的最小距離的行
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;
您可以修改選擇條件以在沒有反演的情況下工作,或者考慮如何將反演與距離限制考慮在內。