如何在knime中对具有唯一值的行进行分组?

时间:2017-03-23 19:36:19

标签: excel knime

我对数据科学感兴趣,而且我对knime很新。我有一个关于在Excel中对数据进行分组的问题。我有一个包含两列的xlsx文件。在xlsx文件中有关于2000人的信息。此信息标题位于A列中,信息位于B列中。在数据中,当一个人的信息完成时,其他人的数据的顺序开始。 A栏中大约有10个独特的标题。人们有一些这些头衔,也许有些人拥有。我想要做的是通过列A中的唯一标题将这些数据转换为列,并将列B中的数据写入行。但是如何?

第一张图是我的数据的样子,第二张图是我想要做的: That is how my data looksThat is what i want

1 个答案:

答案 0 :(得分:1)

您需要在数据中添加一列来标识每行所属的组,然后您可以使用Pivot节点以您希望的方式对其进行转换。

最简单的地方是在Excel中,使用返回上面单元格值的公式,如果A列中的单元格等于“name”,则加1,每次更改名称时都会增加1 。

如果您无法更改Excel源代码,那么在KNIME中执行此操作的最佳方式是使用Gábor建议的Java,R或Python代码段。但是如果你真的想在纯粹的KNIME中做到这一点,那么这是一个缓慢而精细的工作流程:

KNIME workflow to add group IDs

需要按如下方式配置节点:

  • Excel阅读器会返回包含Col0列和Col1
  • 列的表格
  • 一对多包括Col0但不包括Col1 - 只要nameCol0,我们就会向name列提供一个{1}}列}(还有其他每个可能值的列,但我们不会使用这些列)
  • 创建表格结构会创建一个名为Group 0
  • 的整数列
  • Column Appender 配置了不相同的行键和表长度,并使用第一个表中的行键
  • 缺失值使用固定值0
  • 替换缺失的数值

此时表格应如下所示:

KNIME table

在递归循环中,

  • 数学公式将列Group 0替换为公式$Group 0$+$${Iname}$$ - 它取前一个值Group 0并添加name的值表的当前迭代的第一行(通过表行变为
  • 行拆分器配置为“按编号包括行”并输出第2行 - 结束上部端口,第1行发送到下部端口。

Group 0列现在包含一个在每个名称上递增的值:

KNIME table 2

最后,透视节点已配置为在Group 0上进行分组,在Col0上进行分组,并在Col1上按First进行汇总, :

KNIME table 3

您可以根据需要过滤,重新排序等。

应该可以省去One to Many并简单地将Math Formula配置为每次Col0的变量等于'name'时添加1,但是我不能让它第一次工作所以我原样离开了。

请注意,只有当name始终是表格中每个人的第一行时,这才有效,但我不知道如果不是这样,您将如何明确地解释数据。

如果有人有更快或更简洁的KNIME实施,我很乐意看到它!