这项任务似乎非常简单,但我仍然无法找到答案。我已经看到了数据透视表中加权平均值(即均值)的解决方案,但没有加权中位数。
我需要创建一个带有加权中值的数据透视表(使用两列,一列带有值,另一列带有权重 - 每个值的数量要计算到中位数)。换句话说......
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 :(得分: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))
有关计算R中加权中位数的更多信息,请查看this SO article。