從當前表中刪除重複行你好,
我現在父表中有 256k 行。 在進行一些分析時,我發現我有一些重複的行。 該表不斷通過腳本獲取新數據修改。 並且源數據有可能再次重複。
因此,我嘗試創建一個清理腳本,可以在執行一些分析之前運行該腳本。 我在這裡搜索了其他討論並找到了解決方案( https://community.jmp.com/t5/Discussions/Elimination-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 文件中將包含大量數據。
提前致謝!
回复:從當前表中刪除重複行謝謝GZMORGAN0,
我能夠使用您的方法來消除任何重複項。 使用 DIF 公式創建新列。 然後使用腳本對時間列進行排序,選擇任何零(diff = 0 表示重複行)並刪除重複項。回复:從當前表中刪除重複行尼德,
如果時間是您的主要標識符,一種選擇是為以下內容創建一個新列: Dif(:日期時間,1)或獲取 Dif(:Datetime,1) ==0 的行,它應該是重複的。 但是,如果可能存在具有相同日期時間但不同工具或其他標識符的記錄,則按這些標識符和日期時間進行排序,然後獲取行或選擇其中identifier == Lag(identifier,1) & Dif(:Datetime ,1 ) ==0。 然後刪除這些行。
回复:從當前表中刪除重複行謝謝!我會嘗試使用你的代碼看看我是否可以適應它。
我確實有時間列,我可以使用排序來獲得彼此相鄰的相同行。 所有其他列都是實際的流程數據,因此沒有任何重複項(除了產品名稱、產品類型等流程標識符之外)。 但時間列可用於排序並讓相同的行相鄰。那麼問題就變成選擇同一行之一。
我發現 JMP 14 有新功能,但 JMP 13(我的版本)不支持該功能。 因此,也許如果有小的簡單代碼來選擇重複行(兩個條目之一),那麼我可以簡單地刪除它們。
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
重複項的背景:我的腳本從每週生成的 CSV 文件中提取數據,並將其導入到 JMP 主表中。 每週數據自生成之日起已過去 7 天。 因此,如果一周內的 CSV 是在星期一中午 12:00 生成的,下周是在星期一上午 8:00 生成的,那麼可能會出現三個小時的重複。
這就是數據進入 JMP 後我希望排除的內容。 在到達 JMP 之前無法消除重複項,因此我希望在 JMP 中找到解決方案。
回复:從當前表中刪除重複行尼德,
您缺少有關數據的關鍵信息:是否有一列或多列應代表唯一記錄。 例如:
- 多步驟生產線(例如半導體)通常會使用“批次#”、“晶圓#”、“操作#”、“設備 ID”和“日期時間”列
- 重複測量藥物研究:受試者 ID 和日期時間
- ETC。
然後,如果這些列應該代表唯一的記錄(鍵),那麼其他列應該無關緊要,您需要決定是否要保留第一個或最後一個記錄。換句話說,您的餐桌訂單是否提供有關重複項的信息? 例如,數據庫通常按最新到較舊的順序排序。
附加的腳本創建一個包含 256k 唯一行和 25 列的表。 隨機選擇 200 行。 前 100 個重複一次,第二個 100 個重複兩次,並且表順序被打亂。 所以現在有 256,300 行。
它是由 2 個字符串列和 2 個整數列創建的,因此 4 列代表唯一鍵。該腳本保留表中排序最高的行。 中間表設置為不可見,以便在沒有渲染時間的情況下測試性能。 但是,要了解代碼的作用,您可能需要將它們轉換為可見。
我已經在我的電腦上運行了 6 次,每次都花費了 2.0 秒。時間會根據受騙者的數量而有所不同。
該腳本通過僅處理應遠小於 256k 的重複行來查找要刪除的行。
最後一點。 您可能不想從主表中刪除這些行,而是希望排除它們或維護保留或保存列,以便您可以重置行狀態以排除它們。
祝你好運!