gpt4 book ai didi

javascript - Crossfilter:如何从组中删除或过滤值

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:36 25 4
gpt4 key购买 nike

我正在尝试获取一个包含 csv 文件值总和的组,但我想删除所有零值。

我的 csv 文件示例:

Continents      Function      Value  
South Asia Function1
South Asia Function2 14
Europe Function1
Europe Function2 12
Europe Function3 2

我想得到

{"key":"Function2","value":26},  
{"key":"Function3","value":2}

这是我的代码:

var ndx = crossfilter( csv );  
var functions = ndx.dimension( function( d )
{
return d["Function"];
} );
var functionAmountGroup = functions.group().reduceSum( function ( d )
{
return d3.format( ".2f" )( d["Value"] );
} );

我明白了

{"key":"Function2","value":26},  
{"key":"Function3","value":2},
{"key":"Function1","value":0}

但由于值为零,我想删除“Function1”行。

我试过用值维度过滤,没问题

var filterValues = ndx.dimension( 
function( d )
{
return d["Value"];
} ).filter(
function( d )
{
if( 0 < Math.abs( d ) )
return d;
} );

这对我有好处:

{"Continents":"Europe","Function":"Function3","Value":"2"},  
{"Continents":"South Asia","Function":"Function2","Value":"14"},
{"Continents":"Europe","Function":"Function2","Value":"12"}

但是filterValues现在是一个维度,那么我不知道如何用这些过滤结果得到一个带有“Function”的新维度。
有点像

filteredValues.dimension( function( d )
{
return d["Function"];
} );

这是错误的!

有人可以帮帮我吗?我没有更多的想法了!
非常感谢,
凡妮莎

最佳答案

请创建一个 jsFiddle。我不相信你发布的代码会按照你所说的那样做,一个有效的例子会解决这个问题。具体来说:

var filterValues = ndx.dimension( 
function( d )
{
return d["Value"];
} ).filter(
function( d )
{
if( 0 < Math.abs( d ) )
return d;
} );

返回一个维度,而不是记录列表。

回答您的问题:如果您执行以下操作,functionAmountGroup.top(Infinity) 应该会给您您想要的。

var ndx = crossfilter( csv );  
var functions = ndx.dimension( function( d ) {
return d["Function"];
} );
var functionAmountGroup = functions.group().reduceSum( function ( d ) {
return d3.format( ".2f" )( d["Value"] );
} );
var filterValues = ndx.dimension(
function( d ) {
return d["Value"];
} ).filter(
function( d ) {
if( 0 < Math.abs( d ) )
return d;
} );

新维度上的 .filter() 调用将调整在另一个维度上定义的 functionAmountGroup。

你也可以这样做:

var ndx = crossfilter( csv );  
var functions = ndx.dimension( function( d ) {
return d["Function"];
} );
var functionAmountGroup = functions.group().reduceSum( function ( d ) {
return d3.format( ".2f" )( d["Value"] );
} );
functionAmountGroup.top(Infinity).filter( function (d) { return d.value !== 0; } );

编辑:这不起作用。您实际上需要创建一个经过预过滤的假 Crossfilter 组并将其传递给 dc.js。像这样:

var filteredFunctionAmountGroup = {
all: function () {
return functionAmountGroup.top(Infinity).filter( function (d) { return d.value !== 0; } );
}
}

此处示例:http://jsfiddle.net/h28hp/17/

关于javascript - Crossfilter:如何从组中删除或过滤值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22013581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com