如何在Vega/Vega-Lite中通过transform选取数据集前n行?
实现取数据集前N行的替代方案
Vega/Vega-Lite 没有内置head转换,但可以通过window+filter的组合转换实现完全一致的效果,适配你当前场景的完整配置如下:
{ "$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": { "url": "heights.csv" }, "transform": [ { "window": [{"op": "row_number", "as": "row_num"}] }, { "filter": "datum.row_num <= 3" } ], "mark": "bar", "encoding": { "x": {"field": "Person", "type": "nominal"}, "y": {"field": "Height", "type": "quantitative"} } }
实现逻辑
- 第一步
window转换调用row_number算子,按照数据源的原始输入顺序为每一行生成从1开始递增的行号,存储在新增的row_num字段中 - 第二步
filter转换筛选行号小于等于3的记录,即可拿到排序后的前3行数据
可选优化
如果担心后续数据源返回的排序规则可能发生变动,可以在window转换中显式指定按身高降序排序,确保永远取到身高最高的3人,修改后的transform配置如下:
"transform": [ { "window": [{"op": "row_number", "as": "row_num"}], "sort": [{"field": "Height", "order": "descending"}] }, { "filter": "datum.row_num <= 3" } ]
内容的提问来源于stack exchange,提问作者Sean Letendre
相关产品推荐
相关产品推荐

