R: lattice.qq Как мне сделать многопанельный график лечения [x] против контроля? - PullRequest
2 голосов
/ 25 июня 2010

У меня есть датафрейм, который выглядит так:

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.

Я могу сделать один сюжет «Лечение1 против контроля» следующим образом:

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

Это выглядит так:

alt text

Я бы хотел автоматически создавать похожие графики обработки2 против контроля ... ЛечениеX против контроля. Это место для петли или решетка лучше?

1 Ответ

1 голос
/ 26 июня 2010

Для этого на одной панели требуется некоторая реорганизация. Сначала я сгенерирую примерный набор данных с такой же структурой, как у вас

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

Затем добавьте переменную, чтобы различать лечение и контроль (т.е. "Treatment2" перекодируется как "Treatment" и т. Д.)

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

Затем переставьте набор данных так, чтобы каждой группе лечения была предоставлена ​​копия контрольных данных

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

Наконец, мы можем сделать желаемый график

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

Если вам нужны отдельные графики для каждой обработки, тогда цикл будет лучше

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