从当前表中删除重复行你好,
我现在父表中有 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 的重复行来查找要删除的行。
最后一点。 您可能不想从主表中删除这些行,而是希望排除它们或维护保留或保存列,以便您可以重置行状态以排除它们。
祝你好运!