我有一个如下所示的数据框:
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'))
看起来像这样:
我想自动制作类似治疗2对比控制的图...治疗X对照。这是一个循环的地方还是格子有更好的方法?
答案 0 :(得分:1)
要在单个面板上执行此操作需要重新安排。首先,我将生成一个与您的结构相同的样本数据集
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()