2016-10-21 2 views
4

Ich versuche, den folgenden Code auszuführen:geom_vline und facet_wrap Fehler in ggplot

temp_plotdata <- data.table(Treatment_Code = c('Control', 'Control', 
               'Second Mailing', 'Second Mailing', 
               'First Mailing', 'First Mailing'), 
          Q9 = c(9, 14, 10, 3, 1, 4)) 

output_gg <- 
    ggplot(temp_plotdata, aes(x = Q9)) + 
    geom_histogram(binwidth = 1, fill = 'lightblue') + 
    geom_vline(data = temp_plotdata[, summary(Q9)[c(2,3,5)], by=Treatment_Code], 
      aes(xintercept = V1), 
      linetype = 'dashed', color = 'darkred') + 
    facet_wrap(~Treatment_Code, ncol = 1) 

Ich bin immer wieder ein Fehler von:

Fehler in provideDimnames (x, sep = sep, Basis = Base): ‚dimnames‘ auf nicht-Array angewandt

ich weiß, das Problem in dem geom_vline Teil des Codes ist, weil, wenn ich es laufen, ohne diese Leitungen oder es mit etwas wie geom_vline(xintercept = c(3, 5, 8)) läuft es funktioniert gut. Ich habe auch versucht, die Daten von geom_vline zunächst in einen separaten Datenrahmen zu verwandeln, aber es hat nicht funktioniert.

Ich habe letztes Jahr ein sehr ähnliches Stück Code ausgeführt und es hat gut funktioniert, also bin ich mir nicht sicher, ob sich etwas mit geom_vline geändert hat oder ob mein Code aufgrund neuer Daten oder einiger kleiner Änderungen nicht korrekt ist gemacht.

Danke für jede Hilfe, die Sie geben können.

+0

Ich bin mit 2.1.0. Ich denke, das ist die neueste Version. –

Antwort

2

Dies passiert, weil die Klasse V1 (die von data.table zurückgegebene Zusammenfassungsspalte) Tabelle ist, anstatt ein numerischer Vektor. Ändern Sie es in einen Vektor und es sollte funktionieren.

output_gg <- 
    ggplot(temp_plotdata, aes(x=Q9)) + 
    geom_histogram(binwidth=1, fill='lightblue') + 
    geom_vline(data=temp_plotdata[, as.vector(summary(Q9)[c(2,3,5)]), by=Treatment_Code], 
      aes(xintercept=V1), 
      linetype='dashed', color='darkred') + 
    facet_wrap(~ Treatment_Code, ncol=1) 

Vergleichen Sie die Struktur des Datenrahmens vor und nach:

str(temp_plotdata[, summary(Q9)[c(2,3,5)], by=Treatment_Code]) 
Classes ‘data.table’ and 'data.frame': 9 obs. of 2 variables: 
    $ Treatment_Code: chr "Control" "Control" "Control" "Second Mailing" ... 
    $ V1   :Class 'table' num [1:9] 10.25 11.5 12.75 4.75 6.5 ... 
- attr(*, ".internal.selfref")=<externalptr> 
str(temp_plotdata[, as.vector(summary(Q9)[c(2,3,5)]), by=Treatment_Code]) 
Classes ‘data.table’ and 'data.frame': 9 obs. of 2 variables: 
    $ Treatment_Code: chr "Control" "Control" "Control" "Second Mailing" ... 
    $ V1   : num 10.25 11.5 12.75 4.75 6.5 ... 
- attr(*, ".internal.selfref")=<externalptr> 
+0

Ah ha! Das funktioniert. Vielen Dank! –

Verwandte Themen