我似乎在使用 Open Refine ( Google Refine 2.5 [r2407] ) 进行复杂的重复行清理时遇到了工作流问题。到目前为止,我发现的只是如何删除基于单个列的重复行。
我的目标是删除基于多个列的重复行,充其量是在特定层次结构中。
例子
鉴于Refine中的以下虚拟数据
+----+---------+---------+--------+------------+------+-----------------------------------+
| id | timeAgo | title | author | date | val1 | [After Refine, keep Record] |
+----+---------+---------+--------+------------+------+-----------------------------------+
| 1 | 10 | Faust | Mr. A | 2014-01-15 | 10 | ->B, older entry |
| 2 | 11 | Faust | Mr. A | 2014-01-21 | 10 | A (because of Date) |
| 3 | 8 | Faust | Mr. A | 2014-01-15 | 10 | B |
| 4 | 8 | RedHead | Mr. B | 2014-01-21 | 34 | ->D, older entry |
| 5 | 7 | RedHead | Mr. B | 2014-01-21 | 34 | ->D, same time Ago, but lower ID |
| 6 | 7 | RedHead | Mr. A | 2014-01-01 | 13 | C (because of author, date, val1) |
| 7 | 7 | RedHead | Mr. B | 2014-01-21 | 34 | D |
+----+---------+---------+--------+------------+------+-----------------------------------+
我想根据以下逻辑杀死重复的行。如果
- title && auther && date && val1 相同,比
- 保留最新(最少 timeAgo)行,如果有多个,则
- 保留 id 最高的那个
结果将是:
+---------+----+---------+---------+--------+------------+------+
| Refined | id | timeAgo | title | author | date | val1 |
+---------+----+---------+---------+--------+------------+------+
| A | 2 | 10 | Faust | Mr. A | 2014-01-21 | 10 |
| B | 3 | 8 | Faust | Mr. A | 2014-01-15 | 10 |
| C | 6 | 7 | RedHead | Mr. A | 2014-01-01 | 13 |
| D | 7 | 7 | RedHead | Mr. B | 2014-01-21 | 34 |
+---------+----+---------+---------+--------+------------+------+
简单的方法?
如果没有其他解决方案,谢天谢地,我采用了脚本/GREL 解决方案。
但是是否可以通过 Refines 著名的工作流“记录”来实现上述逻辑,从而可以将其提取并应用于其他相同格式的数据集?
我这样做的动机是让员工能够更周到地处理数据(超越 excel),但无需立即使用成熟的脚本语言面对他们。