如何在Vega中基于指定列值计算分组的y相对变化?
Vega数据转换:按分组计算指定x值的y相对变化
原始数据集
c x y a 5 10 a 6 12 a 7 14 a 8 16 b 5 20 b 6 22 b 7 24 b 8 26
需求说明
针对c字段的分组(a、b两组),计算每个数据行的y值相对于本组内x=6时y值的变化量newY:
- a组基准值为x=6时的y=12,所有行
newY = y - 12 - b组基准值为x=6时的y=22,所有行
newY = y - 22
实现方案
通过Vega的数据转换组合完成需求,分两步配置transform:
1. 生成各组基准值数据集
先从原始数据中提取每组x=6对应的基准y值,存储为独立数据集:
{ "name": "groupBaseY", "source": "yourOriginalDataName", // 替换为你的原始数据名称 "transform": [ // 筛选x=6的行 {"filter": "datum.x === 6"}, // 按c分组,提取每组的y值作为基准 {"aggregate": [{"op": "first", "field": "y", "as": "baseY"}], "groupby": ["c"]} ] }
这一步会得到如下中间数据集:
c baseY a 12 b 22
2. 关联基准值并计算newY
将原始数据与基准数据集关联,计算相对变化量:
{ "name": "finalData", "source": "yourOriginalDataName", "transform": [ // 通过c字段关联基准数据集,给每行添加baseY字段 {"lookup": "c", "from": {"data": "groupBaseY", "key": "c", "fields": ["baseY"]}}, // 计算newY = 当前y值 - 本组基准y值 {"calculate": "datum.y - datum.baseY", "as": "newY"} ] }
最终输出结果
c x y newY a 5 10 -2 a 6 12 0 a 7 14 2 a 8 16 4 b 5 20 -2 b 6 22 0 b 7 24 2 b 8 26 4
内容的提问来源于stack exchange,提问作者Osman Mamun
相关产品推荐
相关产品推荐

