2014-05-17 4 views
1

Je cherchais sur le Web mais je n'ai pas trouvé la réponse que je recherchais. Voici mes données d'entrée:Tracer un histogramme basé sur la classe Date

Date   Calls 
2012-01-01  3 
2012-01-01  3 
2012-01-01  10 
2012-03-02  15 
2012-03-02  7 
2012-03-02  5 
2012-04-02  0 
2012-04-02  5 
2012-04-02  18 
2012-04-02  1 
2012-04-02  0 
2012-05-02  2 

Je veux tracer une hist qui aura la somme des appels pour chacun des jours dans la colonne « Date ». Oui, cela peut être fait en identifiant les niveaux de la colonne Date et en additionnant les appels correspondants, mais en demandant si c'est une façon élégante de le faire. La colonne "Date" est comme "Date" data.class(). Selon cet exemple, l'hist final doit avoir 4 cases de (16, 27, 24, 2).

Cheers,

Répondre

4

Eh bien, Techniquement, un histogramme est vraiment seulement pour estimer la fonction de densité des données continues et la façon dont vous avez vos données codées, c'est plus comme Date est une variable catégorique. Donc, vous voulez probablement juste un graphique à barres de comptes qu'un véritable histogramme. Vous pouvez faire quoi avec ggplot avec

qplot(Date,Calls, data=dd, stat="summary", fun.y="sum", geom="bar") 

resulting plot

+0

sympa. J'essayais d'utiliser 'stat_sum' mais je n'arrivais pas à le faire fonctionner. –

1

données Lire:

d <- read.table(text= 
"Date   Calls 
2012-01-01  3 
2012-01-01  3 
2012-01-01  10 
2012-03-02  15 
2012-03-02  7 
2012-03-02  5 
2012-04-02  0 
2012-04-02  5 
2012-04-02  18 
2012-04-02  1 
2012-04-02  0 
2012-05-02  2", 
header=TRUE) 

d$Date <- as.Date(d$Date) 
library(plyr) 
s <- ddply(d,"Date",summarize,Calls=sum(Calls)) 
library(ggplot2) 

Si nous utilisons Date comme la variable x nous obtenons des étiquettes mois:

ggplot(s,aes(x=Date,y=Calls))+geom_bar(stat="identity") 

vous préférerez les étiquettes de date particulière:

ggplot(s,aes(x=factor(Date),y=Calls))+geom_bar(stat="identity") 

Ou étiquettes non par défaut:

ggplot(s,aes(x=format(Date,"%d-%b"),y=Calls))+geom_bar(stat="identity")+ 
    labs(x="Date") 

Il devrait également être possible de le faire en construisant votre propre objet hist et passer à plot.histogram, mais je pense que cette façon est plus facile ...

+0

Merci, ce qui est excellent! Mais je voudrais le faire comme histogramme. Je travaille sur quelque chose maintenant pour créer un nouveau cadre de données: 'pour (i dans les niveaux (facteur (activité $ Date))) {print (somme (activité $ Appels [activité $ Date == i]))}' puis tracez le nouveau cadre. juste pour le défi, je voudrais comme histogramme de base ... :) – flamenco

+0

par "histogramme de base" vous voulez dire quelque chose qui ressemble à la sortie de 'hist()'? Ma réponse, et plusieurs des réponses liées à la question en double, vous montre comment agréger plus efficacement. Comme je l'ai dit dans ma réponse, vous pouvez construire un objet 'hist()' et le tracer avec 'plot.histogram()', mais c'est un peu pénible - vous devez déterminer les points de rupture, les points médians, etc. –

+0

oui! C'est ce que je mets! – flamenco

Questions connexes