2012-08-08 14 views
14

Sto utilizzando ggplot2 e sto cercando di generare un grafico che mostri i seguenti dati.Tracciare i valori medi per ogni livello in 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 

Invece di fare una trama di frequenza delle variabili (vedi sotto il codice), voglio generare un grafico dei valori medi per ogni valore x. Quindi voglio tracciare il punteggio medio ad ogni livello di età. A 18 anni sull'asse x, potremmo avere un sull'asse y per il punteggio. A 23 anni potremmo avere un punteggio medio di 4.5 e così via (Modifica: valori medi corretti). Questo sarebbe idealmente rappresentato con un barplot.

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

solo non è sicuro come fare questo in R con ggplot2 e non riesco a trovare nulla su tali grafici. Statisticamente, non so se la trama che desidero tracciare sia anche la cosa giusta da fare, ma è un negozio diverso.

Grazie!

+0

volevi valori medi, in quanto dai vostri valori medi del set di dati a 18 anni è 3 (non 3,5), e all'età di 23 anni - 4.5 (non 6.2)? – DrDom

+0

Sì, voglio delle medie. In questo esempio, ho inventato alcuni numeri senza pensarci. – ATMathew

+1

@ATMathew, ma dal momento che stai facendo lo sforzo di fornire alcuni dati di esempio, dovresti anche assicurarti che il tuo output di esempio sia accurato per i dati forniti. Altrimenti, porta a confusione inutile .... – A5C1D2H2I1M1N2O1R2T1

risposta

37

Un'altra soluzione

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

enter image description here

+0

Aggiungere una nota su come probabilmente l'OP non voleva convertire i punteggi in un fattore e avrai esattamente la mia risposta. – joran

+0

@DrDom, la risposta è così ovvia ora che l'hai pubblicata! (+1) – A5C1D2H2I1M1N2O1R2T1

+0

@joran, sì, l'ho considerato nella mia risposta. Poiché la media dei fattori sarà un valore senza significato in questo caso. :) – DrDom

8

Se ho capito bene, si potrebbe provare qualcosa di simile:

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

È inoltre possibile utilizzare aggregate() nella base di R invece di caricare un altro pacchetto.

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