OpenRefine - 将多个列值合并到新列中应该(?)工作

BRi*_*erg 3 openrefine data-cleaning grel

我的数据包含多个列,就我的目的而言,这些列是相同的。在这些地方,我需要将多个选定列中的值合并到一个列中。例如,将列名称 1、名称 2 和名称 3 合并为单个列名称。

按照此处的指导,我尝试创建一个新列,其中包含多个列中的值,如下图所示:

列选项

基于列 X 添加列对话框

相信我的 GREL应该结合 dc.contributor.author 中的值(简单地value说,这是我从中选择了编辑列>基于此列添加列的列)、dc.contributor.authorEN_us ( cells["dc.contributor.authorEN_us"].value)、dc.contributor .author1 ( cells["dc.contributor.author1"].value) 和 dc.contributor.authoren_US ( cells["dc.contributor.authoren_US"].value)。

但是,我的新列不包含第二、第三或第四列中的值,即使我知道这些值存在。

我的 GREL 语法有错误吗?我应该使用不同的方法来合并列吗?

预先感谢您的任何帮助。

Ett*_*zza 5

恐怕您一直在查看的教程既过时又不完整。问题是您null在某些列中具有值。在 OpenRefine 中,如果其中一个值为 ,则连接(即通过 + 连接两个字符串)返回nullnull

\n\n

所以:

\n\n

"Hello" + " " + "World"给出“你好世界”。

\n\n

\n\n

"Hello" + null + " " + "World"返回null

\n\n

关于这个问题的讨论一直没完没了。直到最近,我还建议您使用:

\n\n

任何一个:

\n\n
coalesce(value,cells[\'dc.contributor.author1\'].value, cells[\'dc.contributor.authorEN_us\'].value, cells[\'dc.contributor.authoren_US\'].value)\n
Run Code Online (Sandbox Code Playgroud)\n\n

( Openrefine 3中引入的coalesce函数返回一系列中的第一个非空值)

\n\n

或者:

\n\n
value.toString() + cells[\'dc.contributor.authorEN_us\'].value.toString() + cells[\'dc.contributor.authoren_US\'].value.toString()\n
Run Code Online (Sandbox Code Playgroud)\n\n

(转为null空字符串\'\')

\n\n

但在未来的 OpenRefine 3.3(现在在 b\xc3\xaata 中),感谢 @mathieu-saby,OpenRefine 将有一个菜单,允许您轻松合并列。您只需更新您的版本即可。:)

\n\n

列菜单的屏幕截图,其中打开了子菜单“编辑列”,并突出显示了“加入列...”条目。

\n