如何在OpenRefine中比较同一项目中不同行的单元格

如何在OpenRefine中比较同一项目中不同行的单元格,openrefine,Openrefine,我有一组数据,其中一列名为START,包含日期值 是否有方法将一行的START值与项目中的所有其他START值进行比较 我想创建一个新列,其中包含这样一条消息:“行n°x,y,…,z包含更大的起始值”。 我曾尝试使用“cell.cross”函数比较两个项目(实际上是同一个项目),但这似乎太耗费资源和时间了: 1. create a new column COMPARE with a fixed value 2. use "cell.cross" function agains

我有一组数据,其中一列名为
START
,包含日期值

是否有方法将一行的
START
值与项目中的所有其他
START
值进行比较

我想创建一个新列,其中包含这样一条消息:“行n°x,y,…,z包含更大的起始值”。

我曾尝试使用
“cell.cross”
函数比较两个项目(实际上是同一个项目),但这似乎太耗费资源和时间了:

1. create a new column COMPARE with a fixed value
2. use "cell.cross" function against column COMPARE to import in every row all the START values of the project, collapsed in a new column named ALL_START_VALUES
3. compare START value against the array in ALL_START_VALUES and generate log
太糟糕了,我的200k行项目在第2步冻结

这就是我想要得到的:

行|开始|日志

0 | 2019-01-01T00:00:00Z |第1,2行包含更大的起始值

1 | 2019-01-02T00:00:00Z |第2行包含更大的起始值

2 | 2019-01-03T00:00:00Z|


如果我理解正确,您的步骤2涉及创建一个包含200000个单元格的项目,每个单元格包含200000个元素,即200000^2=400亿个元素OpenRefine是一个数据清理工具,可以从数据库导入和导出表格数据,但它本身不是数据库

如果要检查包含日期、文本或其他内容的列上的值,可以使用列菜单应用各个方面。正如Ettore所说,如果您使用的数据集有数百万或数十亿行(这可能需要为OpenRefine分配大量RAM),那么您可能会遇到麻烦


您的用例可能更接近于需要支持函数的数据库。在RDBMS领域,我建议使用PostgreSQL

OpenRefine不容易支持在多行之间工作的操作。您可以在一定程度上使用“记录”模式来实现这一点,但如果您尝试创建一个包含200k行的记录,则会出现性能问题

所以我怀疑OpenRefine不是解决这个问题的最佳工具

就您实际如何处理整个问题而言——感觉这实际上是一个“排序”问题——如果您根据开始列中的日期对行进行排序,那么下面包含大于或等于开始日期的每一行。从那里可以相当容易地在LOG列中生成所需的语句—在START列中查找包含较晚日期的第一行,然后就可以知道该列下的所有行也包含较晚日期。(我可以在OpenRefine中找到这样做的方法,但它相当复杂——我认为这不是最好的解决方案)

希望这能有所帮助