1

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

第一张图片是我的数据的样子,第二张图片是我想要做的 这就是我的数据的样子:: 这就是我想要的

4

1 回答 1

1

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

最简单的方法是在 Excel 中,使用返回上述单元格值的公式,如果 A 列中的单元格等于“名称”,则加 1 - 每次更改名称时给出一个递增 1 的数字。

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

添加组 ID 的 KNIME 工作流程

节点需要配置如下:

  • Excel Reader返回一个包含列的表格Col0Col1
  • 一对多包括Col0但不包括Col1- 这给了我们一个name包含 1 的列Col0name也是每个其他可能值的列,但我们不会使用这些)
  • 创建表结构创建 1 个整数列,名为Group 0
  • Column Appender配置为不同的行键和表长度,并使用第一个表中的行键
  • Missing Value将缺失的数值替换为固定值 0

此时表格应如下所示:

KNIME 表

在递归循环内部,

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

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

KNIME 表 2

最后,通过该方法将Pivoting节点配置为 group on Group 0、 pivot onCol0和 aggregate on ,给出:Col1First

KNIME 表 3

您可以根据需要对其进行过滤、重新排序等。

应该可以省略一对多,只需将数学公式配置为每次Col0等于“名称”的变量时加 1,但我第一次无法让它工作,所以我保持原样。

请注意,这仅name在表中每个人始终是第一行时才有效,但我不明白如果不是,您如何明确解释数据。

如果有人有更快或更简洁的 KNIME 实现,我会很高兴看到它!

于 2017-03-24T14:14:53.337 回答