2012-08-08 27 views
14

Estoy usando ggplot2 y estoy tratando de generar un gráfico que muestra los siguientes datos.Trazado de los valores promedio para cada nivel en 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 

En vez de hacer un gráfico de frecuencias de las variables (véase más abajo el código), quiero generar una representación gráfica de los valores medios para cada valor de x. Así que quiero trazar el puntaje promedio en cada nivel de edad. A los 18 años en el eje x, podríamos tener un en el eje y para obtener una puntuación. A los 23 años, podríamos tener un puntaje promedio de 4.5, y así sucesivamente (Editar: valores promedio corregidos). Idealmente, esto se representaría con una barra de representación.

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

simplemente no está seguro de cómo hacer esto en R con ggplot2 y parece que no puede encontrar nada en estas parcelas. Estadísticamente, no sé si la trama que deseo trazar es incluso lo correcto, pero esa es una tienda diferente.

Gracias!

+0

Quiso decir valores medios, porque a partir de sus valores promedio del conjunto de datos a los 18 años es de 3 (no 3.5), y en la edad 23 - 4.5 (no 6.2)? – DrDom

+0

Sí, quiero promedios. En ese ejemplo, inventé algunos números sin pensarlo. – ATMathew

+1

@ATMathew, pero dado que se está esforzando por proporcionar algunos datos de muestra, también debe asegurarse de que el resultado de su muestra sea exacto para los datos proporcionados. De lo contrario, conduce a una confusión innecesaria ... – A5C1D2H2I1M1N2O1R2T1

Respuesta

37

Otra solución

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

enter image description here

+0

Añade una nota sobre cómo el OP probablemente no quería convertir los puntajes a un factor y tendrás mi respuesta exactamente. – joran

+0

@DrDom, ¡la respuesta es tan obvia ahora que la has publicado! (+1) – A5C1D2H2I1M1N2O1R2T1

+0

@joran, sí, lo he considerado en mi respuesta. Dado que la media de factores tendrá un valor sin sentido en este caso. :) – DrDom

8

Si le he entendido bien, usted podría intentar algo como esto:

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

También puede utilizar aggregate() en la base de R en lugar de cargar otro paquete.

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