创建不同的子集,绘制它们并存储图
Create different subsets, plot them and store the plots
我有一系列大型数据框,如下所示:
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 个不同的 classes 和至少 500 个观测值 class。我想做的是为每年和 class(所以 20 年 * 15 classes = 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,这不是很方便,但否则使用列表对象将不起作用:列表将在循环结束时被覆盖。
这是供您使用的原型 - 我只是对 mtcars
数据集中的 cyl
值进行了一次循环,但您可以将其扩展到您的用例:
library(ggplot2)
#container list to hold ggplots
l <- list()
#unique cylinder groups
cyl_groups <- sort(unique(mtcars$cyl))
#iterate through each cylinder group, plotting mpg vs disp
for(j in seq_along(cyl_groups)){
l[[j]] <- ggplot(mtcars[mtcars$cyl == cyl_groups[[j]], ], aes(mpg, disp)) + geom_point() + ggtitle(paste0("Cylinders = ", cyl_groups[j]))
}
#save into one PDF
pdf("plots.pdf", onefile = TRUE)
for(i in seq_along(l)) {
print(l[[i]])
}
dev.off()
这为您提供了 PDF 格式,每个图都有一页。
我有一系列大型数据框,如下所示:
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 个不同的 classes 和至少 500 个观测值 class。我想做的是为每年和 class(所以 20 年 * 15 classes = 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,这不是很方便,但否则使用列表对象将不起作用:列表将在循环结束时被覆盖。
这是供您使用的原型 - 我只是对 mtcars
数据集中的 cyl
值进行了一次循环,但您可以将其扩展到您的用例:
library(ggplot2)
#container list to hold ggplots
l <- list()
#unique cylinder groups
cyl_groups <- sort(unique(mtcars$cyl))
#iterate through each cylinder group, plotting mpg vs disp
for(j in seq_along(cyl_groups)){
l[[j]] <- ggplot(mtcars[mtcars$cyl == cyl_groups[[j]], ], aes(mpg, disp)) + geom_point() + ggtitle(paste0("Cylinders = ", cyl_groups[j]))
}
#save into one PDF
pdf("plots.pdf", onefile = TRUE)
for(i in seq_along(l)) {
print(l[[i]])
}
dev.off()
这为您提供了 PDF 格式,每个图都有一页。