2016-02-29 2 views
2

Эта задача кажется очень простой, и все же я до сих пор не могу найти ответ. Я видел решения для взвешенных средних значений (т. Е. Средства) в сводных таблицах, но не взвешенных медианов.сводная таблица с взвешенными медианами

Мне нужно создать сводную таблицу со взвешенными медианами (используя два столбца, один со значением и один с весом - количество каждого значения, которое должно быть рассчитано по отношению к медиане). Другими словами ...

city   value weight 
Phoenix  100  40 
Phoenix  140  12 
Phoenix  500  15 
San Francisco 700  5 
San Francisco 300  5 
San Francisco 350  1 
San Francisco 600  1 

вернется ...

city   weighted median 
Phoenix  100 
San Francisco 475 

Я пытался найти адекватное решение в PostgreSQL и R, но до сих пор не повезло. Любая помощь ценится!

ответ

0

В R, вы можете попробовать это:

require("plyr") 

> ddply(df, ~city, summarise, median=median(rep(value, weight))) 
      city median 
1  Phoenix 100 
2 San Francisco 475 

данных:

df <- data.frame(city=c("Phoenix", "Phoenix", "Phoenix", 
         "San Francisco", "San Francisco", "San Francisco", "San Francisco"), 
       value=c(100, 140, 500, 700, 300, 350, 600), 
       weight=c(40, 12, 15, 5, 5, 1, 1)) 

Посмотрите this SO article для получения дополнительной информации о вычислении взвешенной медианы в R.

+0

Спасибо Tim , Кажется, что он должен работать, но я продолжаю получать сообщение об ошибке «Ошибка: недействительный». Не знаком с этим пакетом. И значение, и вес являются целыми числами. – Kasey

+0

Обновлено, повторите попытку. –

+0

такое же сообщение об ошибке - оно действительно работает с созданным вами фреймом данных, так что возможно ли его сбросить нулевые значения? – Kasey