R: lattice.qq Come faccio a fare una trama multi-panel di trattamento [x] vs controllo?

StackOverflow https://stackoverflow.com/questions/3120468

  •  30-09-2019
  •  | 
  •  

Domanda

Ho un dataframe che assomiglia a questo:

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.

posso fare un unico appezzamento di Treatment1 vs controllo in questo modo:

qq(groupname~totdist|fCycle, data=Data, 
 subset=(groupname=='Control'|groupname=='Treatment1'))

Ecco come si presenta:

alt text

Mi piacerebbe fare automaticamente trame simili di Treatment2 vs controllo ... TreatmentX vs controllo. E 'questo il posto per un ciclo o se reticolo avere un modo migliore?

È stato utile?

Soluzione

Per fare questo su un unico pannello richiede un po 'ri-organizzare. In primo luogo, io generare un set di dati di esempio con lo stesso tipo di struttura come la tua

library(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))

Successivamente, aggiungere una variabile di distinguere tra il trattamento e controllo (cioè "Treatment2" viene ricodificato come "Treatment", ecc.)

Data$groupname2 <- factor(gsub('[1-9]','',as.character(Data$groupname)))

Poi ridisporre l'insieme di dati in modo che ciascun gruppo di trattamento è dato una copia dei dati di controllo

Data2 <- NULL
for(treat in paste('Treatment',1:7,sep='')){
  Data2 <- rbind(Data2,
                 cbind(rbind(Data[Data$groupname == treat,],Data[Data$groupname == 'Control',]),
                       treat))
}

Finalmente siamo in grado di fare il grafico desiderato

qq(groupname2~totdist|fCycle*treat, data=Data2)

Se vuoi trame separate per ogni trattamento, quindi un ciclo sarebbe meglio

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top