2013-06-20 5 views
1

Я пытаюсь вычислить агрегацию со средневзвешенным значением (AverageViewingTime за число просмотров) в таблице под названием DFA_CMO. DFA_CMO имеет 5 измерений и сайт среди них.R ddply и взвешенное среднее

Вот код:

ddply(DFA_CMO,.(Site),summarize, wm = weighted.mean(DFA_CMO$AverageViewingTime, DFA_CMO$Views, ,na.rm=TRUE)) 

Но результат disapointing, так как он показывает то же значение для каждого из полей:

   Site  wm 
1   Advideum 21.17633 
2   bbc.com 21.17633 
3  Boursorama 21.17633 
4  Canal Plus 21.17633 
5  CNN Network 21.17633 
6  EuronewsFR 21.17633 
7 invitemedo.com 21.17633 
8   Lfddfdse 21.17633 
9   Le Monde 21.17633 
10  Les Echos 1 21.17633 
11  lopinion.fr 21.17633 
12   TF1.fr 21.17633 
13  ViadeoFR 21.17633 
14 WSJ UK - IBM PE 21.17633 

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

+1

При использовании обобщения, вам не нужно включать имя data.frame ... на самом деле вы не должны. Существует неявный 'with (...)' там, что означает, что вы можете ссылаться на имена столбцов, как если бы они были локально определенными переменными. – Justin

+0

Я не вижу 'DFA_CMO'. пожалуйста, разместите таблицу, в которой вы запускаете свой код, или аналогичный vrsion, если вы не можете/не хотите показывать реальный. А также (но это может быть только я), что «DFA_CMO имеет 5 измерений, а сайт среди них» означает? – Michele

ответ

3

Не пропустите DFA_CMO$<var_name> по телефону ddply. Просто передайте сами имена переменных.

ddply(DFA_CMO,.(Site),summarize, 
     wm = weighted.mean(AverageViewingTime, views, ,na.rm=TRUE)) 

Причина заключается в том, что, давая имя фрейма данных, вы фактически проходя фиксированные векторы средневзвешенного функции, а именно значение для всех строк в кадре данных. Если вы передадите только имена столбцов, то ddply будет оценивать их в контексте этих подмножеств строк, соответствующих каждой группе.

+0

Большое спасибо Хонгу за ответ и объяснение. – user2506015

+0

Теперь он работает хорошо! – user2506015