我对数据科学很感兴趣,而且我对 knime 还是很陌生。我有一个关于在 Excel 中对数据进行分组的问题。我有一个包含两列的 xlsx 文件。在 xlsx 文件中有关于 2000 人的信息。此信息标题在 A 列中,信息在 B 列中。在数据中,当一个人的信息完成后,另一个人的数据开始排序。A 列中大约有 10 个唯一标题。人们拥有其中一些头衔,也许有些人拥有所有头衔。我想要做的是通过A列中的唯一标题将这些数据转换为列中的数据,并将B列中的数据写入行。但是怎么做?
问问题
4353 次
1 回答
1
您需要在数据中添加一列来标识每行属于哪个组,然后您可以使用 Pivot 节点以您想要的方式对其进行转换。
最简单的方法是在 Excel 中,使用返回上述单元格值的公式,如果 A 列中的单元格等于“名称”,则加 1 - 每次更改名称时给出一个递增 1 的数字。
如果您无法更改 Excel 源代码,那么在 KNIME 中执行此操作的最简洁方法是使用 Gábor 建议的 Java、R 或 Python 代码段。但是,如果您真的想在纯 KNIME 中执行此操作,这里有一个缓慢而精细的工作流程:
节点需要配置如下:
- Excel Reader返回一个包含列的表格
Col0
和Col1
- 一对多包括
Col0
但不包括Col1
- 这给了我们一个name
包含 1 的列Col0
(name
也是每个其他可能值的列,但我们不会使用这些) - 创建表结构创建 1 个整数列,名为
Group 0
- Column Appender配置为不同的行键和表长度,并使用第一个表中的行键
- Missing Value将缺失的数值替换为固定值 0
此时表格应如下所示:
在递归循环内部,
- 数学公式
Group 0
用公式替换列$Group 0$+$${Iname}$$
- 它采用表的当前迭代的第一行的前一个值Group 0
并将值相加(通过表行到变量)name
- 行拆分器配置为“按编号包含行”并输出第 2 行 - 结束到上端口和第 1 行到下端口。
该Group 0
列现在包含一个在每个名称上递增的值:
最后,通过该方法将Pivoting节点配置为 group on Group 0
、 pivot onCol0
和 aggregate on ,给出:Col1
First
您可以根据需要对其进行过滤、重新排序等。
应该可以省略一对多,只需将数学公式配置为每次Col0
等于“名称”的变量时加 1,但我第一次无法让它工作,所以我保持原样。
请注意,这仅name
在表中每个人始终是第一行时才有效,但我不明白如果不是,您如何明确解释数据。
如果有人有更快或更简洁的 KNIME 实现,我会很高兴看到它!
于 2017-03-24T14:14:53.337 回答