2017-07-03 23 views
0

我有一个非常大的(800行)OpenRefine数据集。一个单元格包含多个不同的值,但具有一致的结构(请参阅下面的示例),其数据通过与json数组相似的逗号分隔。我想创建一个新的多值列,其中只包含特定类别的元素,例如Creator或Subject。在下面的例子中,我想创建一个名为Item Creator的新列,其中只包含Dana M. Ashley和John Smith,这两个列在文本中。到目前为止,我已经尝试了表达式forEach(value.split(","), v, v.contains("Creator:")),并且我得到了一个数组来识别包含Creator的段,但我还不知道如何将该字符串文本提取到新列中。帮助将不胜感激。使用多值字段中的选定子字符串创建新列

Publisher: American Federation of Teachers, Creator: Dana M. Ashley, Creator: John Smith, Subject: Prosocial behavior, Subject: Program development, Subject: Behavior problems, Subject: Classroom techniques, Subject: Student behavior, Subject: School culture, Subject: Educational environment, Subject: Positive Behavior Supports, Resource Type: Text, Language: English, Audience: Educator, Format: pdf

回答

0

为了把这个值在新列中使用的下拉菜单中的当前列(包含合并数据),然后选择“编辑列 - >在此基础上添加列列”

如果用GREL公式中的'filter'表达式替换'forEach'表达式,那么您将获得创建者列表(在数组中)。为了存储这些细胞中,可以加入阵列成一个字符串:

filter(value.split(","), v, v.contains("Creator:")).join("|") 

这应该让你与创作者名单新列 - 这将需要更多的一些整理删除“造物主”位得到只是名单列表

+0

谢谢欧文。我并不清楚 - 我了解创建新列的过程,但是在那里,我非常重视从分割中获取真实的数组项,并将它们转换为相关新列中的文本。以下是我使用我列出的GREL公式时在预览中显示的示例。 - '[错误,真实,真实,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假,假] – user3206

+0

如果您在GREL中使用'过滤器'来代替'forEach',您将获得值而不是真/假 –

+0

这就是我正在寻找的答案。非常感谢。 – user3206

相关问题