按组子集df,循环遍历散点图

时间:2013-05-29 23:36:23

标签: r list plot scatter-plot lapply

我想自动生成几百个散点图,但是我没有用一种紧凑的方法来处理子集。数据框有三个感兴趣的领域:

site           code            value

1              x                30
1              y                14
1              z                12
2              x                35
2              y                19

等,

其中site = numeric,value = numeric,code = grouping variable。

大约有400个网站和300个代码。

我想要的是什么:

  1. 基于field = code
  2. 对df进行子集化
  3. plot x = site vs y = value,as scatter plot
  4. 将每个散点图写入.pdf
  5. 中的单独页面
  6. 自动化流程
  7. 任何评论都表示赞赏。例如,这种方法生成错误“子集”必须评估为逻辑。 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轴的标签声明有什么不对吗? (注意:此代码块导致每个子集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()
    

1 个答案:

答案 0 :(得分:3)

我选择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