如何在ggplot直方图中指定类'长度?

时间:2017-05-05 10:22:53

标签: r ggplot2 statistics

我处理数据,我有两个变量,如:

 AgeC        NbSin2003(NbClaim)
[39.5,47.5)     0
[39.5,47.5)     1
[51.5,58.5)     0
[20,27.5)       0
[39.5,47.5)     0
[27.5,33.5)     0
[51.5,58.5)     0
[39.5,47.5)     1
[36.5,39.5)     0
[39.5,47.5)     1
[39.5,47.5)     0
[20,27.5)       0
[39.5,47.5)     0
[51.5,58.5)     0
[51.5,58.5)     0
[51.5,58.5)     0
[27.5,33.5)     0
[58.5,69)       0

现在使用ggplot我希望在AgeC的功能中使用NbSin2003的直方图,在任何AgeC类中我想得到NbSin2003的平均值对应 值。

示例:

如果我们选择AgeC的班级[39.5,47.5],我们将:

AgeC        NbSin2003
[39.5,47.5)     0
[39.5,47.5)     1
[39.5,47.5) 0
[39.5,47.5) 1
[39.5,47.5) 1
[39.5,47.5) 0   
[39.5,47.5) 0

对于这个类,直方图的条形长度为(0 + 1 + 0 + 1 + 1 + 0 + 0)/7=0.42

我成功地使用了barplot和xtabs这样做: barplot(xtabs(NbSin2003/sum(NbSin2003)~AgeC,data))

但是我想使用ggplot来获得更好的直方图质量,并且使用它完成了我的所有图形。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

不确定我理解你的问题。您使用barplot提供的解决方案并没有按照您所说的完成...(对于“[39.5,47.5]”级别返回“1”,而不是您建议的0.42。)

假设您希望条形图的高度代表“AgeC”因子中每个级别的平均值,这是一种方法:

library (dplyr)
data %>% 
  group_by(AgeC) %>% 
  summarise(avg = sum(NbSin2003) / n()) %>% 
  ggplot(aes(x = AgeC, y = avg)) + geom_bar(stat = "identity")

前两个在“AgeC”因子中逐级调用,然后计算每个级别的平均值(就像你的例子一样)。然后将结果数据传送到ggplot。