r - 按组对 df 进行子集化,遍历散点图

标签 r list plot scatter-plot lapply

我想自动生成几百个散点图,但我没有通过紧凑的方式处理子集化取得多大成功。数据框具有三个感兴趣的字段:

site           code            value

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

等等,

其中站点 = 数字,值 = 数字,代码 = 分组变量。

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

我想要的:

  1. 根据字段 =code 子集 df
  2. 绘制 x=site 与 y=value 的散点图
  3. 将每个散点图写入 .pdf 文件的单独页面
  4. 自动化流程

任何意见表示赞赏。例如,此方法会生成错误“子集”必须评估为逻辑。 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()

最佳答案

我会选择 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 的一般信息.

关于r - 按组对 df 进行子集化,遍历散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825642/

相关文章:

r - 识别时间序列中重复的数字序列

r - 识别二进制矩阵中与 1 相邻的所有元素

list - map slice 的 map

plot - 在 Julia 散点图中的点上绘制具有指定方向的箭头

r - rmarkdown 中的增量嵌套列表

r - 如何防止R系统命令语法错误

c++ - 在哪里可以获得对链表进行合并排序的 C/C++ 示例代码?

python - 如何获取导致 any() 返回 True 的值?

matlab - 在matlab中绘制梯度但只出现空白

r - R 中 glmnet 图的图例标签错误