打开 Refine——通过从一对列中查找值来创建新列

Open Refine--create new column by looking up values from a pair of columns

我在 OpenRefine 中有一个 table,其中 A、B 和 C 列如下所示:

A | B | C | D ---|---|---|--- a | 1 | b | 2 b | 2 | | c | 3 | a | 1 d | 4 | c | 3 我想通过使用 A 作为索引从 B 中获取与 C 中的值相对应的值来创建列 D。希望这是有道理的?我不太幸运地弄清楚如何在 GREL 中执行此操作。

您可以使用 'cross' 函数在整个项目中查找值。 Cross 通常用于在不同的 OpenRefine project/file 中查找值,但实际上如果你将它指向你已经在的同一个项目,它的工作原理是一样的。

因此 - 从 Col C 开始,您可以将 "Add new column based on this column" 与 GREL 一起使用:

cell.cross("Your project name","Col A")

您将得到一个 'rows' 的数组 - 如果相同的值多次出现在 A 列中,您可能会得到多行。

要从数组中提取值,您可以使用类似的东西:

forEach(cell.cross("Your project name","Col A"),r,r.cells["Col B"].value).join("|")

需要最后的'join'将数组转换成字符串才能存储结果(数组不能直接存储)