具有加权中位数的枢轴 table
pivot table with weighted medians
这个任务看起来很简单,但我仍然找不到答案。我在枢轴 tables 中看到了加权平均值(即均值)的解决方案,但没有看到加权中位数。
我需要创建一个带有加权中位数的数据透视表 table(使用两列,一列是值,一列是权重——每个值的数量要根据中位数计算)。换句话说……
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
将return…
city weighted median
Phoenix 100
San Francisco 475
我一直在尝试在 PostgreSQL 和 R 中找到合适的解决方案,但到目前为止还没有成功。感谢任何帮助!
在 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 中计算加权中位数的更多信息。
这个任务看起来很简单,但我仍然找不到答案。我在枢轴 tables 中看到了加权平均值(即均值)的解决方案,但没有看到加权中位数。
我需要创建一个带有加权中位数的数据透视表 table(使用两列,一列是值,一列是权重——每个值的数量要根据中位数计算)。换句话说……
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
将return…
city weighted median
Phoenix 100
San Francisco 475
我一直在尝试在 PostgreSQL 和 R 中找到合适的解决方案,但到目前为止还没有成功。感谢任何帮助!
在 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 中计算加权中位数的更多信息。