具有加权中位数的枢轴 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 中计算加权中位数的更多信息。