作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试获取一个包含 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; } );
}
}
关于javascript - Crossfilter:如何从组中删除或过滤值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22013581/
我是一名优秀的程序员,十分优秀!