2012-08-08 33 views
14

我正在使用ggplot2,並試圖生成一個顯示以下數據的圖。而不是做的變量的頻率圖的繪製ggplot2中每個級別的平均值

df=data.frame(score=c(4,2,3,5,7,6,5,6,4,2,3,5,4,8), 
       age=c(18,18,23,50,19,39,19,23,22,22,40,35,22,16)) 
str(df) 
df 

(見下面的代碼),我要生成的平均值的每個x值的曲線圖。所以我想繪製每個年齡段的平均分數。在x軸上18歲時,我們可能在y軸上有一個得分的。在23歲時,我們可能得到的平均分數爲4.5等等(編輯:校正的平均值)。理想情況下,這將用一個barplot表示。

ggplot(df, aes(x=factor(age), y=factor(score))) + geom_bar() 
Error: stat_count() must not be used with a y aesthetic. 

只是不知道如何在R與ggplot2做到這一點,似乎無法在這樣的情節找到任何東西。在統計上,我不知道我想要繪製的情節是否是正確的事情,但這是一個不同的商店。

謝謝!

+0

難道你想平均值,因爲從數據集中的平均值在18歲時爲3(不是3.5),並在23歲時 - 4.5(不6.2)? – DrDom 2012-08-08 05:27:18

+0

是的,我想要平均值。在那個例子中,我只是想出了一些沒有考慮它的數字。 – ATMathew 2012-08-08 05:37:16

+1

@ATMathew,但由於您要提供一些樣本數據,您還應該確保您的樣本輸出對於提供的數據是準確的。否則,它會導致不必要的混淆。...... – A5C1D2H2I1M1N2O1R2T1 2012-08-08 05:54:45

回答

37

另一種解決方案

ggplot(df, aes(x=factor(age), y=score)) + stat_summary(fun.y="mean", geom="bar") 

enter image description here

+0

添加關於OP如何不想將分數轉換爲一個因素,你會準確地得到我的答案。 – joran 2012-08-08 05:17:49

+0

@DDDom,現在你已經發布了它的答案是如此明顯! (+1) – A5C1D2H2I1M1N2O1R2T1 2012-08-08 05:21:53

+0

@joran,是的,我在考慮這個問題。因爲在這種情況下平均因素將是無意義的價值。 :) – DrDom 2012-08-08 05:22:37

8

如果我理解你的權利,你可以嘗試這樣的事:

library(plyr) 
library(ggplot2) 
ggplot(ddply(df, .(age), mean), aes(x=factor(age), y=factor(score))) + geom_bar() 
6

您還可以在基礎R使用aggregate()而是加載另一個包。

temp = aggregate(list(score = df$score), list(age = factor(df$age)), mean) 
ggplot(temp, aes(x = age, y = score)) + geom_bar()