带加权中位数的数据透视表

时间:2016-02-29 05:51:54

标签: r postgresql pivot-table median

这项任务似乎非常简单,但我仍然无法找到答案。我已经看到了数据透视表中加权平均值(即均值)的解决方案,但没有加权中位数。

我需要创建一个带有加权中值的数据透视表(使用两列,一列带有值,另一列带有权重 - 每个值的数量要计算到中位数)。换句话说......

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中找到一个合适的解决方案,但到目前为止还没有运气。任何帮助表示赞赏!

1 个答案:

答案 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