R: lattice.qq Comment puis-je faire un terrain multi-panel de traitement [x] vs contrôle?
Question
J'ai un dataframe qui ressemble à ceci:
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.
Je peux faire une seule parcelle de traitement1 vs contrôle comme ceci:
qq(groupname~totdist|fCycle, data=Data,
subset=(groupname=='Control'|groupname=='Treatment1'))
Il ressemble à ceci:
Je voudrais faire automatiquement des tracés similaires traitement2 vs contrôle ... TreatmentX vs contrôle. Est-ce l'endroit idéal pour une boucle ou réseau ne possède une meilleure façon?
La solution
Pour ce faire sur un seul panneau prend un certain réarranger. Tout d'abord, je vais générer un ensemble de données échantillon avec le même genre de structure que le vôtre
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))
Ensuite, ajouter une variable de faire la distinction entre le traitement et le contrôle (à savoir "Treatment2"
est recodé comme "Treatment"
, etc.)
Data$groupname2 <- factor(gsub('[1-9]','',as.character(Data$groupname)))
réarranger Ensuite, l'ensemble de données de sorte que chaque groupe de traitement reçoit une copie des données de commande
Data2 <- NULL
for(treat in paste('Treatment',1:7,sep='')){
Data2 <- rbind(Data2,
cbind(rbind(Data[Data$groupname == treat,],Data[Data$groupname == 'Control',]),
treat))
}
Enfin, nous pouvons faire le graphique désiré
qq(groupname2~totdist|fCycle*treat, data=Data2)
Si vous voulez des parcelles séparées pour chaque traitement, puis une boucle serait mieux
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()