打开 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'将数组转换成字符串才能存储结果(数组不能直接存储)
我在 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'将数组转换成字符串才能存储结果(数组不能直接存储)