Crossfilter kann nicht einfach die zwei Spalten zusammenfassen, die Sie benötigen, so dass die Neuformatierung der Daten Ihre beste Wette ist (gemäß der Konversation in den Kommentaren). Sie können melt.js verwenden, was wie reshape funktioniert, wenn Sie mit R vertraut sind, so dass Sie Ihre Rohdaten nicht berühren müssen.
Diese Lösung setzt voraus, Ihre Daten eine Liste von Objekten mit Schlüssel-Wert-Paare (ziemlich Standard) ist:
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 },
...];
Sie wollen zunächst alle statischen Spalten identifizieren, die Sie nicht wollen, zu „schmelzen“ (disaggregieren):
var staticColumns = ['ccgcode', 'ccgname', 'metric'];
Dann Sie melt
verwenden männliche und weibliche Spalten Gruppierung aufheben. Melt
nimmt in Ihren Daten, die Spalten, die Sie nicht wollen, zu schmelzen, und der Name der neuen Schmelzesäule (in Ihrem Fall ist es sex
):
var ndx = crossfilter(melt(data, staticColumns, 'sex', 'count'));
var sexDim = ndx.dimension(function (d) { return d.sex; });
Sie mit der folgenden Dimension am Ende:
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},
...];
Beachten Sie die hilfreiche _id
, die melt
für Sie erstellt, falls Sie alles wieder zusammenbinden müssen (obwohl Ihre statischen Spalten auch dabei helfen). Sie können false
als fünften Parameter an melt
übergeben, um die _id
Eigenschaft auszuschließen.
Und Sie nach Geschlecht noch Gruppe kann:
var males = sexDim.group().reduceSum(function (d) {
if (d.sex === 'male') {
return d.count;
} else {
return 0;
}
});
Hoffnung, das hilft!
Sie sollten wirklich Ihre Daten so transformieren, dass sie in einem mehr Crossfilter-freundlichen Format vorliegen. Sie sollten es ändern, um eine "Sex" -Dimension zu haben, die zum Beispiel Werte "M" oder "F" hat, und dann sollten Sie eine "Count" -Dimension mit dem Wert haben. –
So haben granularere Daten. Ist das der einzige Weg? – Ciwan
Die Granularität ist die gleiche wie die Menge an Informationen in den Daten nicht ändert. Es ist das Format, das anders ist. Es ist nicht der einzige Weg, aber es ist der beste Weg. Wenn Sie sie in separaten Spalten aufbewahren, werden Sie allerlei Probleme bekommen, während die relativ kleinen Probleme, die dadurch entstehen, dass Ihre Daten länger und nicht länger werden, bereits von Hilfs-Bibliotheken wie Reductio und Universe behandelt werden. –