R: lattice.qq Comment puis-je faire un terrain multi-panel de traitement [x] vs contrôle?

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

  •  30-09-2019
  •  | 
  •  

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:

text alt

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?

Était-ce utile?

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top