我处理数据,我有两个变量,如:
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来获得更好的直方图质量,并且使用它完成了我的所有图形。
谢谢大家!
答案 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。