R: lattice.qq Wie kann ich tun, um einen Multi-Panel-Plot der Behandlung [x] vs Kontrolle?
Frage
Ich habe ein Datenrahmen, dass sieht wie folgt aus:
str(Data)
'data.frame': 11520 obs. of 29 variables:
$ groupname : Factor w/ 8 levels "Control","Treatment1",..: 1 1 1 1 1 1 1 1 1 1 ...
$ fCycle : Factor w/ 2 levels "Dark","Light": 2 2 2 2 2 2 2 2 2 2 ...
$ totdist : num 0 67.5 89.8 109.1 58.3 ...
#etc.
Ich kann so ein einzelnes Grundstück von Behandlung1 vs Kontrolle tun:
qq(groupname~totdist|fCycle, data=Data,
subset=(groupname=='Control'|groupname=='Treatment1'))
Es sieht wie folgt aus:
Ich mag automatisch ähnlichen Grund Anwendung2 vs Kontrolle ... TreatmentX vs Kontrolle machen. Ist dies der richtige Ort für eine Schleife oder ein Gitter, einen besseren Weg hat?
Lösung
Um dies zu tun, auf einer einzigen Platte nimmt einige Neuanordnung. Zuerst werde ich einen Beispieldatensatz mit der gleichen Art von Struktur hat wie Sie
erzeugenlibrary(lattice)
Data <- data.frame(groupname = factor(rep(c('Control',paste('Treatment',1:7,sep='')),each = 100)),
fCycle = factor(rep(rep(c('Dark','Light'),each = 50),8)),
totdist = sample(unlist(iris),800,replace = TRUE))
Als Nächstes fügt eine Variable zwischen Behandlungs- und Kontroll zu unterscheiden (d.h. "Treatment2"
als "Treatment"
umcodiert, etc.)
Data$groupname2 <- factor(gsub('[1-9]','',as.character(Data$groupname)))
neu ordnen Sie dann die Daten-Set, so dass jede Behandlungsgruppe eine Kopie der Steuerdaten gegeben ist
Data2 <- NULL
for(treat in paste('Treatment',1:7,sep='')){
Data2 <- rbind(Data2,
cbind(rbind(Data[Data$groupname == treat,],Data[Data$groupname == 'Control',]),
treat))
}
Schließlich können wir die gewünschten Graphen machen
qq(groupname2~totdist|fCycle*treat, data=Data2)
Wenn Sie für jede Behandlung getrennte Diagramme wollen, dann wäre eine Schleife besser sein
pdf('treatVsContQq.pdf')
for(treat in paste('Treatment',1:7,sep='')){
print(qq(groupname~totdist|fCycle, data=Data,
subset=(groupname=='Control'|groupname==treat)))
}
dev.off()