我想自动生成几百个散点图,但是用一种紧凑的方法来处理子集并没有取得太大的成功。数据框具有三个感兴趣的字段:
site code value
1 x 30
1 y 14
1 z 12
2 x 35
2 y 19
等等,
其中site =数字,value =数字,code =分组变量。
大约有400个站点和300个代码。
我想要的是:
任何意见表示赞赏。例如,这种方法产生的错误“子集”必须评估为逻辑。 lapply调用可能也不起作用。
dfarray<-list(subset(df,df[,2]))
pdf(file="test.pdf")
figures<-lapply(dfarray, function(i) {(plot(i$[,1],i$[,3]))
})
dev.off()
非常感谢
合并d_ply效果很好。我对这个结果感到满意,但是谁能指出X,Y轴的label语句有什么不对吗? (注意:此代码块每个子集导致1 pdf)
names(df)<-tolower(names(df))
names(df)
d_ply(df,"code",function(x){
pdf(file=paste(unique(x$code),".pdf"))
plot(data=x,value~site, xlab=names(x[1]),ylab=as.name(x$code))
dev.off()
})
更新:假设存在数据帧df,下面是此代码的两个有效版本。这将每个组的散点图写入单独的.pdf:
names(df)<-tolower(names(df)
names(df)
d_ply(df,"code",function(x){
pdf(file=paste(unique(x$code),".pdf"))
plot(data=x, value~site, xlab=names(df[1]),ylab=unique(x$code))
dev.off()
})
这将所有散点图(每组一个)写入一个.pdf:
names(df)<-tolower(names(df)
names(df)
pdf(file="df_all.pdf")
d_ply( df, "code", function(x) {
plot(data=x, value~site, xlab=names(df[1]), ylab=unique(x$code))
})
dev.off()
最佳答案
我会使用plyr::d_ply
:
library(plyr)
pdf(file="test.pdf")
d_ply( df.1, "code", function(x) plot( data = x, value~site, main = unique(x$code) ) )
dev.off()
您可能需要阅读有关split-apply-(combine) strategy的一般信息。