2016-02-29 317 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

感謝蒂姆。這似乎應該工作,但我不斷收到'錯誤:無效的'時間'參數'消息。不熟悉這個包。價值和重量都是整數。 – Kasey

+0

我更新了,請重試。 –

+0

同樣的錯誤信息 - 它確實與您創建的數據框一起工作,那麼是否有可能將null值拋出? – Kasey