data-cleaning - OpenRefine - 将多个列值合并到新列中应该(?)工作
问题描述
我的数据包括多个列——出于我的目的——它们是相同的。在这些地方,我需要将多个选定列中的值组合成一列。例如,将列名称 1、名称 2 和名称 3 组合成一个列名称。
按照此处的指导,我正在尝试创建一个新列,其中包含来自多列的值,如下图所示:
我相信我这里的 GREL应该结合 dc.contributor.author 中的值(只是value
因为这是我从中选择Edit column > Add column based on this column 的列),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 中,如果其中一个值为 ,则连接(即通过 + 连接两个字符串)返回null
null
。
所以:
"Hello" + " " + "World"
给出“Hello World”。
但
"Hello" + null + " " + "World"
返回null
。
关于这个问题的讨论一直没完没了。直到最近,我还建议您使用:
任何一个:
coalesce(value,cells['dc.contributor.author1'].value, cells['dc.contributor.authorEN_us'].value, cells['dc.contributor.authoren_US'].value)
(在 Openrefine 3 中引入的coalesce 函数返回一系列中的第一个非空值)
或者:
value.toString() + cells['dc.contributor.authorEN_us'].value.toString() + cells['dc.contributor.authoren_US'].value.toString()
(null
变成空字符串'')
但是在未来的 OpenRefine 3.3(现在处于测试阶段)中,感谢@mathieu-saby,OpenRefine 将有一个菜单,让您可以轻松地合并列。你只需要更新你的版本。:)
推荐阅读
- amazon-cloudwatch - 使用 CDK 从 AWS Cloudwatch 日志流中提取值
- python - 将 Django 应用程序部署到 Heroku 时出现运行时错误
- javascript - 从除其他两个 div 之外的所有 div 中删除类
- python - Python QT - 没有名为“ui.mainwindow”的模块
- swift - 如何在快速减去时仅获得正值?
- python - copy.deepcopy 的意外行为
- youtube-api - 如何提高通过 youtube api 上传视频的每日配额限制?
- batch-file - 批处理脚本 - 否则无法正常工作
- python - 获取用户模型数据并在 django 中更新另一个模型
- node.js - 使用 Passport.js、express-session 和 Youtube oauth 登录用户时遇到问题