Как объединить два набора данных с помощью теста, если значение находится в диапазоне в Vega? - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу объединить набор данных 'queryresult' со столбцом 'смещение' с набором данных 'главы', который имеет два столбца 'startoffset' и 'endoffset', где смещение находится между startoffset и endoffset: chapters.startoffset <= queryresult. offset <= chapters.endoffset </p>

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

      "transform": [
        {
          "type": "lookup",
          "from": "chapters",
          "key": ["startOffset", "endOffset"],
          "values": ["startOffset", "endOffset"],
          "fields": ["offset"],
          "as": ["chapterStart", "chapterEnd"],
          "comp": "inRange"
        }
      ]

Но поле «ключ» допускает только одно поле, и нет поля «comp» для указания других методов сравнения или выражения сравнения.

Я также пытался использовать преобразование формул с выражением «data», но мне нужно было бы использовать более сложные функции массива в качестве выражения для фильтрации объектов в массиве данных.

Минимальный пример для началаfrom is

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "autosize": {"type": "pad", "resize": true},
  "data": [
    {
      "name": "chapters",
      "values": [
        {
          "startOffset": 0,
          "endOffset": 7809,
          "value": "1"
        },
        {
          "startOffset": 7813,
          "endOffset": 13484,
          "value": "2"
        },
        {
          "startOffset": 13488,
          "endOffset": 19862,
          "value": "3"
        }
      ]
    },
    {
      "name": "queryresult",
      "values": [
        {"offset": 17749},
        {"offset": 7421},
        {"offset": 17949},
        {"offset": 8578},
        {"offset": 18307},
        {"offset": 7813}
      ],
      "transform": [
        {
          "type": "lookup",
          "from": "chapters",
          "key": "startOffset",
          "values": ["startOffset", "endOffset"],
          "fields": ["offset"],
          "as": ["chapterStart", "chapterEnd"]
        }
      ]
    }
  ]
}

Цель состоит в том, чтобы добавить поля chapterStart и chapterEnd к каждой записи в queryresult с соответствующей записью из набора данных главы, где смещение от queryresult находится между startOffset и endOffset. Приведенный выше код, очевидно, не может этого сделать, потому что сравнение проводится только между startOffset и offset, и необходимо равенство.

Есть ли другой способ добиться этого в Vega?

...