Как объединить строки в OpenRefine - PullRequest
0 голосов
/ 03 ноября 2019

Как объединить строки на основе некоторого поля идентификатора?

Original Table                   New Table

ID   | Field1 | Field2       ID     | Field1 | Field2
-----|------- |--------      -------|--------|-------
A        5                    A         5        10
A                10           B         1        3
B        1                    C         4        150
B                3
C        4
C                150

Я хочу заполнить данное значение ячейки на основе значения в группе, идентифицированной некоторым полем идентификатора.

То есть, Я хочу агрегировать таблицу и использовать непустое значение в каждом столбце в качестве функции агрегирования.

Ответы [ 4 ]

1 голос
/ 03 ноября 2019

Я думаю, что более простым решением было бы использовать:

1 ° Функция «Редактировать ячейки / Пробел» в столбце идентификатора, чтобы получить что-то вроде этого:

enter image description here

2 ° Затем "Редактировать ячейки / Объединить многозначные ячейки" только в последнем столбце (Field2), что приведет к следующему:

enter image description here

1 голос
/ 03 ноября 2019

В столбце ID используйте пункт меню: Редактировать ячейки -> Пусто. Это должно привести к тому, что таблица будет выглядеть следующим образом:

ID   | Field1 | Field2 
-----|------- |--------
A        5             
                 10    
B        1             
                 3
C        4
                 150

Убедитесь, что вы находитесь в режиме «Записи» (эта опцияв левом верхнем углу сетки данных). Вы должны увидеть, что строки для каждого идентификатора сгруппированы вместе.

Теперь используйте Edit Cells -> Join многозначные ячейки в каждом из других столбцов - это должно оставить вас с одной строкой на запись после того, как вы сделалиэто для всех столбцов

0 голосов
/ 12 ноября 2019

Это не OpenRefine, но я думаю, что это действительно хороший инструмент для пользователей OpenRefine. Вы можете запустить эту Миллер (https://github.com/johnkerl/miller) команда

mlr --csv reshape -r "Field" -o item,value \
then filter -x -S '$value==""' \
then reshape -s item,value input.csv

, чтобы иметь

ID,Field1,Field2
A,5,10
B,1,3
C,4,150

Сначала я создаю аккуратную версию данных (https://vita.had.co.nz/papers/tidy-data.pdf), ичем я преобразую его снова из длинного в широкий формат

0 голосов
/ 03 ноября 2019

Для столбца «ID» используйте «добавить столбец на основе этого столбца»:

filter(
  cell.cross("ProjectName", "ID").cells["Field1"].value,
  v,
  isNonBlank(v)
)[0]

Это установит значение для каждого идентифицированного идентификатора строки.

Original Table      New Table

ID   | Field1 | Field2 | Field1_ | Field2_
-----|------- |--------|---------|--------
A        5                  5        10
A                10         5        10
B        1                  1        3
B                3          1        3
C        4                  4        150
C                150        4        150

Удалить старые столбцы.

После этого удалите дубликаты, используя подход «blank down + facet by blank + удалить соответствующие строки»

...