创建不同的子集,对其进行绘图并存储绘图

时间:2019-04-26 16:37:02

标签: r dataframe ggpubr

我有一系列看起来像这样的大数据框:

Year   Variable   Class
1999   0.4504     a
1999   0.4244     a
1999   0.8980     b
1999   0.8901     b
2000   0.2552     a
2000   0.6504     a
2000   0.7830     b
2000   0.2030     b
...    ...        ...
...    ...        ...
2018   0.6520     a
2018   0.1403     a
2018   0.4502     b
2018   0.1240     b

有15个不同的班级,每年每个班级至少进行500次观察。我想做的是为每个年级和每个班级创建一个子集(因此20年* 15个班级= 300个子集),并进行Q-Q图以查看其分布,以了解它们与正常值之间的差异。

问题是,即使我可以使用循环创建子集,我也不知道如何存储图以供以后查看。

想法是这样的:

library(data.table)
library(ggpubr)

dataframe_list <- list.files(path="B:/Data/", pattern=".csv", full.names=TRUE)
years <- c(1999:2018)

for (i in 1:13){
  db <- fread(dataframe_list[i])
  for (j in 1:length(years)){
    db_year <- subset(db, db$Year==years[j])
    class <- levels(as.factor(db_year$Class))
    for (k in 1:length(class)){
      db_year_class <- subset(db_year, db_year$Class==class[k])
    } 
  }
}

使用以下命令在第三个循环中绘制情节:

ggqqplot(db_year_class$Variable)

并以某种方式存储它,直到循环结束之前我都拥有它们为止。由于列表上的每个数据框至少有300个,因此将每个数据框的绘图存储在一个文件中会很好。

修改,好的,这就是我的修改方法:

library(data.table)
library(ggpubr)

dataframe_list <- list.files(path="B:/Data/", pattern=".csv", full.names=TRUE)
df <- c(A, B, C, D, E, F, G, H, I, J, K, L, M)
years <- c(1999:2018)
plot_list <- list()

for (i in 1:13){
  db <- fread(dataframe_list[i])
  for (j in 1:length(years)){
    db_year <- subset(db, db$Year==years[j])
    class <- levels(as.factor(db_year$Class))
    for (k in 1:length(class)){
      db_year_class <- subset(db_year, db_year$Class==class[k])
      plot_list[[k]] <- ggqqplot(db_year_class$Variable)+ggtitle(paste0("Code_0_", df[i], "_", years[j], "_", class[k]))
      outfiles <- paste0("B:/Results/Plot/Code_0_", df[i], "_", years[j], ".pdf")
      pdf(file=outfiles, onefile = TRUE)
      for(z in seq_along(list)) {
        print(plot_list[[z]])
      }
      dev.off()
    } 
  }
}

结果是每年生成一个pdf文件,虽然不太方便,但是使用列表对象将不起作用:该列表将在循环结束时被覆盖。

1 个答案:

答案 0 :(得分:0)

这是供您使用的原型-我只是对defaults write com.microsoft.VSCode.helper CGFontRenderingFontSmoothingDisabled -bool NO 数据集中的cyl值进行了一次循环,但是您可以将其扩展到您的用例:

mtcars

这会在PDF上为您提供每个图的页面。