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

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

最佳答案

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

关于r - 带加权中位数的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35692803/

相关文章:

r - 如何用R中的readLines删除空行?

linux - 无法通过 R 中的 system() 函数访问 nmap 命令

r - 了解R的mle2函数及其参数

ruby-on-rails - PostgreSQL 所有权错误

excel - 在 Excel 中进行数据透视而不进行聚合,以显示文本而不是数字?

r - R Markdown 中的图像位置

sql - 按 2 列对表格进行排序

javascript - 如何使用 sequelize model.findAll() 获取表的最大值

mysql - 如何将相同的数据合并到水平表中

python - 如果存在特定模式(例如数字然后字母),如何将数据透视表应用于数据框列?