OpenRefine - объединение нескольких значений столбца в новый столбец должно (?) Работать - PullRequest
2 голосов
/ 22 января 2020

Мои данные включают несколько столбцов, которые - для моих целей - одинаковы. В этих местах мне нужно объединить значения в нескольких выбранных столбцах в один столбец. Например, объедините столбцы names1, names2 и names3 в имена одного столбца.

Следуя указаниям здесь , я пытаюсь создать новый столбец, который включает значения из нескольких столбцов, как показано на изображениях ниже:

Column options

Add column based on column X dialog box

Я считаю что мой GREL здесь должен объединить значения в d c .contributor.author (просто value, так как это столбец, из которого я выбрал Редактировать столбец > Добавьте столбец на основе этого столбца ), d c .contributor.authorEN_us (cells["dc.contributor.authorEN_us"].value), d c .contributor.author1 (cells["dc.contributor.author1"].value) и d c .contributor.authoren_US (cells["dc.contributor.authoren_US"].value).

Однако мой новый столбец не содержит значений из этих вторых, третьих или четвертых столбцов, хотя я знаю, что значения существуют.

Есть ли ошибка в моем GREL синтаксис? Должен ли я использовать другой метод для объединения столбцов?

Заранее благодарен за любую помощь.

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Боюсь, что учебник, на который вы смотрели, устарел и неполон. Проблема в том, что у вас есть значение 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)

(функция coalesce , представленная в Openrefine 3, возвращает первое ненулевое значение значение в серии)

или:

value.toString() + cells['dc.contributor.authorEN_us'].value.toString() + cells['dc.contributor.authoren_US'].value.toString()

(превращение null в пустые строки '')

Но в будущем OpenRefine 3.3 (теперь в бета-версии) Благодаря @ mathieu-saby, OpenRefine будет иметь меню, позволяющее легко объединять столбцы. Вам просто нужно обновить свою версию . :)

Screenshot of the Column Menu, with the submenu

0 голосов
/ 22 января 2020

Я полагаю, что вы в настоящее время получаете только первое значение, потому что вы запускаете GREL только с «значения». Вам нужно будет использовать тот же синтаксис, который вы используете с другими столбцами, к которым вы хотите присоединиться. Поэтому ваше выражение должно выглядеть так:

cells["dc.contributor.author"].value + cells["dc.contributor.authorEN_us"].value 
  + cells["dc.contributor.author1"].value + cells["dc.contributor.authoren_US"].value
...