BRi*_*erg 3 openrefine data-cleaning grel
我的数据包含多个列,就我的目的而言,这些列是相同的。在这些地方,我需要将多个选定列中的值合并到一个列中。例如,将列名称 1、名称 2 和名称 3 合并为单个列名称。
按照此处的指导,我尝试创建一个新列,其中包含多个列中的值,如下图所示:
我相信我的 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 语法有错误吗?我应该使用不同的方法来合并列吗?
预先感谢您的任何帮助。
恐怕您一直在查看的教程既过时又不完整。问题是您null在某些列中具有值。在 OpenRefine 中,如果其中一个值为 ,则连接(即通过 + 连接两个字符串)返回nullnull。
所以:
\n\n"Hello" + " " + "World"给出“你好世界”。
但
\n\n"Hello" + null + " " + "World"返回null。
关于这个问题的讨论一直没完没了。直到最近,我还建议您使用:
\n\n任何一个:
\n\ncoalesce(value,cells[\'dc.contributor.author1\'].value, cells[\'dc.contributor.authorEN_us\'].value, cells[\'dc.contributor.authoren_US\'].value)\nRun Code Online (Sandbox Code Playgroud)\n\n( Openrefine 3中引入的coalesce函数返回一系列中的第一个非空值)
\n\n或者:
\n\nvalue.toString() + cells[\'dc.contributor.authorEN_us\'].value.toString() + cells[\'dc.contributor.authoren_US\'].value.toString()\nRun Code Online (Sandbox Code Playgroud)\n\n(转为null空字符串\'\')
但在未来的 OpenRefine 3.3(现在在 b\xc3\xaata 中),感谢 @mathieu-saby,OpenRefine 将有一个菜单,允许您轻松合并列。您只需更新您的版本即可。:)
\n\n\n