2016-04-06 4 views
0

Ich recherchierte diese Frage ziemlich oft und entschuldigte mich, wenn ich eine Antwort verpasste, aber ich kann keine spezifische Antwort auf mein Szenario finden. Ich möchte 2 Diagramme erstellen (für jede Ebene Konto: Dr und Cr) mit 6 Box-Plots, jeweils basierend auf Daten in drei Spalten. Die Daten sind ähnlich den unten angegebenen Daten (unter der Annahme gibt es sechs Tage, 01/01/2016-06/01/2016):Wie können Sie effizient Daten für Diagramme (z. B. Boxplots) in R?

Date   Days  Acct 
01/01/16  7  Cr 
01/01/16  5  Dr 
02/01/16  6  Cr 
01/01/16  4  Dr 
02/01/16  6  Dr 

Und nehmen wir an, dass mit nur 6 einzigartige Datum für eine 1.000 Zeilen geht weiter Werte und zwei Kontowerte - Cr und Dr. Ich werde erklären, was ich getan habe, um das Diagramm zu bekommen, aber ich weiß, dass es nicht die effizienteste Methode ist, weil ich im Moment eine for-Schleife verwende.

Ich habe die Cr-Daten einem Datenrahmen zugewiesen, dann die Dr-Daten einem anderen Datenrahmen. Dann habe ich die eindeutigen Datumswerte von jedem Datenrahmen neuen Datenrahmen zugewiesen. Danach laufe ich eine For-Schleife einen Datenrahmen für jeden Datumswert und weisen Sie die Tag-Werte jeweils zu erstellen, wie unten dargestellt:

01/01/2016 (Data Frame 1, col A) 
5         
7         
6 

02/01/2016 (Data Frame 2, col A) 
3 
5 

Dann laufe ich ein cbind.fill die Daten alle Frames in einem kombinieren mit 6 Spalten, wobei das Datum die Kopfzeile und die Tage die Werte in den Zeilen sind. Ich führe einen Boxplot auf diesem Datenrahmen.

Danke für jede Hilfe!

Antwort

1

In Ordnung, also hoffe ich, dass ich Ihre Frage richtig interpretiere. Sie möchten zwei Diagramme (1 für jede Acct-Ebene), jedes Diagramm sollte sechs Boxplots haben (eine Box pro Datum). Da Ihr Dataset nicht groß genug war, um es als Beispiel zu verwenden, habe ich ein eigenes erstellt und gezeigt, wie die Boxplots mit ggplot2 und Basis R erstellt werden können.

library(ggplot2) 
set.seed(123) 
date_vec = seq(as.Date('2016/1/1'), as.Date('2016/1/6'), by = 'day') 
df = data.frame(
    Date = sample(date_vec, 1000, replace = T), 
    Days = rpois(1000, lambda = 2), 
    Acct = sample(c('Dr','Cr'), 1000, replace = T), 
    stringsAsFactors = FALSE 
) 
     Date Days Acct 
1 2016-01-02 1 Dr 
2 2016-01-05 2 Dr 
3 2016-01-03 1 Dr 
4 2016-01-06 3 Cr 
5 2016-01-06 3 Dr 
6 2016-01-01 2 Cr 

Sie könnten ggplot2 und facet_wrap von Acct verwenden:

ggplot(df, aes(x = factor(Date), y = Days))+ 
    geom_boxplot()+facet_wrap(~Acct)+theme_bw()+ 
    xlab('Date') 

enter image description here

Oder können wir zwei Panel boxplot in der Basis machen R:

par(mfrow = c(1,2)) #plot both simultaneously 
with(subset(df, Acct == 'Cr'), 
    boxplot(Days~Date, main = 'Cr Boxplots')) 
with(subset(df, Acct == 'Dr'), 
    boxplot(Days~Date, main = 'Dr Boxplots')) 

enter image description here

Offensichtlich müssten Sie mit den X-Achsenbeschriftungen herumspielen, um ein informativeres Diagramm zu haben. Ich hoffe das hilft.

+0

Wow! Es gibt offensichtlich eine Menge, die ich noch über R lernen muss! Danke, Flummi! Habe ich Recht, dass es zu diesem Szenario nicht viel online gibt oder habe ich es nicht richtig recherchiert? –

+0

Ich denke, wenn Sie einige Zeit damit verbracht haben, einige 'R'-Funktionen wie' mit', 'Teilmenge' und die' * apply'-Klasse von Funktionen zu betrachten, könnte es Ihnen helfen. Natürlich ist SO auch immer eine großartige Ressource! – bouncyball

Verwandte Themen