You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Knime循环中每次迭代后移除指定行数的实现方案

在Knime里实现循环迭代移除极值行的方法

核心逻辑

用循环结构反复处理数据集,每次迭代都去掉X个Column1最小的样本和X个最大的样本,直到剩下的行数不够再删(也就是行数小于2*X+1)为止,同时把每一轮的结果都存下来。


具体操作步骤(以X=2为例)

1. 导入初始数据

用File Reader或者Table Creator把你的数据集导进来,保证Column1是数值类型就行。

2. 启动循环

拖一个Generic Loop Start节点,把初始数据连进去,这就是循环的起点。

3. 循环体内的核心处理

这部分是关键,要完成极值过滤和循环判断:

  • 给行按Column1排名
    加个Rank节点,选Column1作为排名列,排序方向设为升序(从小到大排),排名类型选Unique ranks (1,2,3,...)——哪怕有重复值,每一行的排名都是唯一的,避免删错数量。
  • 过滤掉极值行
    接一个Row Filter节点,设置过滤条件:
    保留排名大于X(比如X=2,就去掉前2个最小的),同时排名小于当前总行数 - X + 1(比如9行的话,9-2+1=8,就去掉排名8、9的两个最大的)的行。
  • 判断是否继续循环
    加个Row Count节点统计当前行数,再用Rule Engine写判断规则:
    $Row Count$ >= 2*2 + 1 => TRUE
    ELSE => FALSE
    
    把这个判断结果连到Loop End的"Continue Loop"端口——如果行数够继续删,就返回循环;不够就停止。
  • 收集每轮结果
    用Loop End节点,勾选"Collect all iterations",这样每一轮的数据集都会被收集起来输出。

4. 查看或导出结果

Loop End输出的就是每一轮的处理结果,你可以用Table View挨个查看,或者用File Writer导出成文件。


对应示例的验证

你给出的9行数据、X=2的情况:

  • 第一轮:直接输出原始9行
  • 第二轮:去掉排名1、2(0.2、0.5)和8、9(1.9、1.9),剩下5行
  • 第三轮:当前5行,去掉排名1、2(0.6、0.7)和4、5(1.3、1.2),剩下排名3的1.2那一行
  • 第四轮:只剩1行,小于2*2+1=5,循环停止

实用小技巧

  • 可以把X做成流变量,这样要改移除数量的时候,不用挨个改节点参数,直接调变量值就行
  • 如果Column1重复值多,别用Dense ranks,不然会导致移除的行数不准,Unique ranks更稳妥

内容的提问来源于stack exchange,提问作者iturrizaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:52:43