2014-02-03 7 views
2

У меня есть данные ниже.dc.js - как получить среднее значение столбца в наборе данных

 
col1 col2 value 
a 01/01/14 10 
a 01/01/14 35 
a 01/01/14 68 
a 01/01/14 21 
a 01/01/14 24 
b 01/01/14 26 
b 01/01/14 35 
b 01/01/14 39 
b 01/01/14 87 
c 01/01/14 25 
c 01/01/14 63 
c 01/01/14 11 
c 01/01/14 25 
c 01/01/14 35 

Если бы я хотел взять сумму col1. Я мог бы сделать это, используя col1Dim.group().reduceSum(function(d) { return d.value }). Если мне нужен счетчик, я могу заменить сумму на счетчик.

Но я здесь для среднего. Так к этому. Мне нужно взять сумму col1 и count col1.

Любая идея, как я могу разделить и получить среднее значение?

Пожалуйста, помогите. Застрял в этом почти 3 дня.

+0

Как насчет получения суммы и счета, а затем среднего значения суммы/счета? – Tibos

+0

Как это сделать с помощью 'dc.js'? – user3206082

ответ

11

Вы должны использовать метод group.reduce(add, remove, initial), как:

var col1DimTotal = col1Dim.group().reduce(reduceAdd, reduceRemove, reduceInitial); 

function reduceAdd(p, v) { 
    ++p.count; 
    p.total += v.value; 
    return p; 
} 

function reduceRemove(p, v) { 
    --p.count; 
    p.total -= v.value; 
    return p; 
} 

function reduceInitial() { 
    return {count: 0, total: 0}; 
} 

Поскольку вы используете dc.js, вы должны будете использовать chart.valueAccessor метод для использования в среднем в графиках, как:

chart.valueAccessor(function(p) { return p.value.count > 0 ? p.value.total/p.value.count : 0; }); 
+0

Большое спасибо .. – user3206082

+0

Также вы можете сообщить мне, как я могу нарисовать метку 'x-axis', если бы я хотел, чтобы она была на' col1'. Пример: вместо «даты оси x» мне потребуется «a, b, c, d». – user3206082

+1

Любой шанс, что вы могли бы опубликовать некоторый код, чтобы представить какой-то контекст? Мне сложно понять ваш вопрос, учитывая, что ваш размер/групповой выбор должен давать вам метки оси x, уже похожие на a, b, c, d. – davidshinn