Вега лайт сверху и снизу 10 - PullRequest
2 голосов
/ 14 марта 2020

Мне было интересно, можно ли отображать как верхние, так и нижние 10 объектов (количественных) рядом друг с другом в vega lite.

Я знаю, как получить их по отдельности, но не оба:

 "transform": [
    {
      "window": [{"op": "rank", "as": "rank"}],
      "sort": [{"field": "Days_to_maturity", "order": "descending"}]
    },
    {"filter": "datum.rank <= 10"}
  ],

1 Ответ

1 голос
/ 14 марта 2020

Да, вы можете сделать что-то вроде этого:

  "transform": [
    {
      "window": [{"op": "rank", "as": "rank"}],
      "sort": [{"field": "Days_to_maturity", "order": "descending"}]
    },
    {"joinaggregate": [{"op": "max", "field": "rank", "as": "total"}]}
    {"filter": "(datum.rank <= 10) || (datum.rank > datum.total - 10)"}
  ],

Обратите внимание, что агрегат rank будет давать равные значения одинакового ранга, поэтому он может не отображать ровно 10 на каждом конце, если есть дубликаты значения в ваших данных. Если вы хотите просто отобразить первую и последнюю 10 строк независимо от дубликатов, вы можете изменить на count окно с помощью ignorePeers:

  "transform": [
    {
      "window": [{"op": "count", "as": "rank"}],
      "sort": [{"field": "Days_to_maturity", "order": "descending"}],
      "ignorePeers": true
    },
    {"joinaggregate": [{"op": "max", "field": "rank", "as": "total"}]},
    {"filter": "(datum.rank <= 10) || (datum.rank > datum.total - 10)"}
  ],

Более подробную информацию о параметрах преобразования окон можно найти в Документы Window Transform .

...