如何用geom_histogram按两个变量的比例加权?

时间:2018-02-28 20:53:28

标签: r ggplot2

我正在使用的套餐:

  • GGPLOT2

我正在使用的起始数据集:

Group_Size       Group_Premium   Group_Claims
26               24544.01        18181.25
6                10017.12        7604.51         
13               12694.34        8787.00
98               90916.20        67166.73
27               31113.72        27180.83

我想做什么?

我正在尝试创建类似于直方图的东西。

我想通过Group_Size进行bin,这样我就有了0-20,21-40,41-60等的容器[宽度为20的容器]。所以Group_Size箱子就是这个“直方图”的x轴。

我希望y轴绘制总和(Group_Claims)/ sum(Group_Premium)。因此,例如,在上面的虚拟数据集中,我希望0-20 bin具有以下y值:

(7604.51 + 8787.00) / (10017.12 + 12694.34) = 0.7217

到目前为止我尝试过的代码......

library(ggplot2)

df <- data.frame(Group_Size = c(26, 6, 13, 98, 27),
                 Group_Premium = c(24544.01, 10017.12, 12694.34, 90916.20, 31113.72),
                 Group_Claims = c(18181.25, 7604.51, 8787.00, 67166.73, 27180.83))

my_plot <- ggplot(
  data=df
  , aes(x=Group_Size, weights=Group_Claims/Group_Premium)) +
  geom_histogram(binwidth=20, boundary = 0)

my_plot

然而,这并不像我想要的那样有用。它将sum(Group_Claims / Group_Premium)作为y值而不是sum(Group_Claims)/ sum(Group_Premium)。我怎样才能实现我的目标?谢谢,全部。

1 个答案:

答案 0 :(得分:1)

以下情况如何?

df %>%
    mutate(binGroupSize = cut(Group_Size, breaks = seq(0, 100, by = 20))) %>%
    group_by(binGroupSize) %>%
    summarise(ratioSum = sum(Group_Claims) / sum(Group_Premium)) %>%
    ggplot(aes(binGroupSize, ratioSum)) + geom_bar(stat = "identity")

enter image description here

说明:使用cut来关联Group_Size(bin宽度= 20),然后按binGroupSizesummarise分组{{1}的总和}和Group_Claims;然后绘制成条形图。

或者如果你想保持“空”水平:

Group_Premium

enter image description here