Crossfilterは必要な2つの列を単純に合計することができないため、データを再フォーマットすることが最良の方法です(コメント内の会話による)。 Rに精通している場合は(reshape)のように動作するので、生データに触れることはできません。
このソリューションは、あなたのデータは、キーと値のペアを持つオブジェクトのリスト(かなり標準)である前提としています
data = [
{ ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3, male: 24, female: 76 },
{ ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3, male: 46, female: 54 },
...];
あなたが最初にあなたが(「融解」したくないすべての静的列を識別したいです
var staticColumns = ['ccgcode', 'ccgname', 'metric'];
次に、melt
を使用してオスとメスの列をグループ解除します。 Melt
は(あなたのケースで、それはsex
だ)あなたのデータ、あなたが溶融したくない列を取り込み、新たな溶融列の名前:
var ndx = crossfilter(melt(data, staticColumns, 'sex', 'count'));
var sexDim = ndx.dimension(function (d) { return d.sex; });
次の次元で終わる:
sexDim = [
{ sex: 'male', count: 24, _id: 0, ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3 },
{ sex: 'male', count: 46, _id: 1, ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3},
{ sex: 'female', count: 76, _id: 0, ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3 },
{ sex: 'female', count: 54, _id: 1, ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3},
...];
は、すべてのバックをまとめて結びつける必要がある場合に備えて作成されています(ただし、静的な列もこれに役立ちます)。第5パラメータとしてfalse
をmelt
に渡して_id
プロパティを除外することができます。
そして男女別のグループあなたはまだすることができます:
var males = sexDim.group().reduceSum(function (d) {
if (d.sex === 'male') {
return d.count;
} else {
return 0;
}
});
希望に役立ちます!
あなたは本当にデータをクロスフィルターに適した形式に変換する必要があります。たとえば、 "Sex"ディメンションの値が "M"または "F"であるように変更する必要があります。値が「Count」ディメンションである必要があります。 –
より細かいデータがあります。それが唯一の方法ですか? – Ciwan
粒度はデータ内の情報の量が変化しないのと同じです。それは違うフォーマットです。これは唯一の方法ではありませんが、それが最良の方法です。別々の列にそれらを保持することは、あらゆる種類の問題を引き起こすことになりますが、ReductioやUniverseなどのヘルパーライブラリでは、より広いデータではなく、データを長くすることによる問題はほとんどありません。 –