r - 更改脚本以使用数据文件名/变量列表?
问题描述
我一直在使用这个模板脚本来加载和绘制数据:
library("ggplot2")
library("scales")
library("zoo")
library("lubridate")
library("grid")
library("gridExtra")
library("gtable")
library("labeling")
Template.sum.plot <- read.csv("F:/br/RF/Template_SK.csv", header=TRUE, sep=",", dec=".", quote="")
Template.sum.plot$Template_SK.SUM=rowSums(Template.sum.plot[,-1])
Template.sum.plot$date.hour <- ymd_hms(Template.sum.plot$filenames)
Template.sum.plot<-as.data.frame(Template.sum.plot)
Template_Total.SK.Data.Table.plotted <- ggplot(data=Template.sum.plot, aes(x=date.hour, y=Template_SK.SUM)) + geom_line(color="blue") + scale_y_continuous(labels=comma) + scale_x_datetime(position="top", labels=date_format("%F"), date_breaks="1 month") + theme(axis.title.x=element_blank(), plot.title = element_text(hjust = 0.5, size = 12, margin=margin(0,0,10,0)), panel.background=element_rect(fill='white'), panel.grid.major = element_line(colour = "black", linetype=3), panel.grid.minor = element_blank(), axis.ticks.x=element_blank()) + labs(x=(paste("4WRM, ",(format(Template.sum.plot$date.hour[1], '%Y-%m-%d %T %Z'))," to ",(Template.sum.plot$date.hour[(nrow(Template.sum.plot))]))) , y="PPM\n") + ggtitle("Template PON") + geom_vline(xintercept=as.numeric(Template.sum.plot$date.hour[(which(Template.sum.plot$date.hour == paste("2019-07-12 06:00:00")))]), linetype=2, color="red") + geom_vline(xintercept=as.numeric(Template.sum.plot$date.hour[(which(Template.sum.plot$date.hour == paste("2019-09-16 06:00:00")))]), linetype=2, color="red") + geom_line(aes(y = rollmean(Template_SK.SUM, 336, na.pad=TRUE)), color = "#111111")
png(filename="F:/br/Template.SK.Data.Table.plot.png", width=30, height=5, units="in", res=600)
grobz <- lapply(list(Template_Total.SK.Data.Table.plotted), ggplotGrob)
grobz.plot <- arrangeGrob( grobs = list(rbind(grobz[[1]], size = "last")), ncol = 1)
grid.draw(grobz.plot)
dev.off()
我一直在手动搜索/替换“模板”到“XXF”和“XXGF”,然后运行我的脚本直到现在,但我想知道我是否可以制作一个列表(例如list_data <- list(c("XXF","XXGF","XXGT")
)并将每次出现的“模板”交换为列出名字?
解决方案
你可以写一个函数 -
read_and_plot <- function(filename) {
Template.sum.plot <- read.csv(filename, header=TRUE, sep=",", dec=".", quote="")
Template.sum.plot$Template_SK.SUM=rowSums(Template.sum.plot[,-1])
Template.sum.plot$date.hour <- ymd_hms(Template.sum.plot$filenames)
Template.sum.plot<-as.data.frame(Template.sum.plot)
Template_Total.SK.Data.Table.plotted <- ggplot(data=Template.sum.plot,
aes(x=date.hour, y=Template_SK.SUM)) +
geom_line(color="blue") + scale_y_continuous(labels=comma) +
scale_x_datetime(position="top", labels=date_format("%F"), date_breaks="1 month") +
theme(axis.title.x=element_blank(),
plot.title = element_text(hjust = 0.5, size = 12, margin=margin(0,0,10,0)),
panel.background=element_rect(fill='white'),
panel.grid.major = element_line(colour = "black", linetype=3),
panel.grid.minor = element_blank(), axis.ticks.x=element_blank()) +
labs(x=(paste("4WRM, ", (format(Template.sum.plot$date.hour[1], '%Y-%m-%d %T %Z'))," to ",(Template.sum.plot$date.hour[(nrow(Template.sum.plot))]))) , y="PPM\n") +
ggtitle("Template PON") +
geom_vline(xintercept=as.numeric(Template.sum.plot$date.hour[(which(Template.sum.plot$date.hour == paste("2019-07-12 06:00:00")))]), linetype=2, color="red") + geom_vline(xintercept=as.numeric(Template.sum.plot$date.hour[(which(Template.sum.plot$date.hour == paste("2019-09-16 06:00:00")))]), linetype=2, color="red") +
geom_line(aes(y = rollmean(Template_SK.SUM, 336, na.pad=TRUE)), color = "#111111")
png(filename= paste(dirname(filename), sub('csv', 'png', basename(filename)), sep = '/'), width=30, height=5, units="in", res=600)
grobz <- ggplotGrob(Template_Total.SK.Data.Table.plotted)
grobz.plot <- arrangeGrob(grobs = list(rbind(grobz, size = "last")), ncol = 1)
grid.draw(grobz.plot)
dev.off()
}
并将其应用于目录中的每个 csv 文件 -
all_files <- list.files('F:/br/RF/', pattern = '\\.csv$', full.names = TRUE)
lapply(all_files, read_and_plot)
请注意,我删除lapply
了grobz <- lapply(list(Template_Total.SK.Data.Table.plotted), ggplotGrob)
因为Template_Total.SK.Data.Table.plotted
只是一个情节。也因为这下一行不需要grobz[[1]]
,只使用grobz
就足够了。
推荐阅读
- python - 如何将行值(时间序列)转换为 PySpark 中的列值?
- excel - 是否可以在 VBA 中使用不同的数据类型进行 Let 和 Get?
- flutter - 如何在 Flutter 中测试更新 PublishSubject 或 BehaviorSubject 对象(RxDart)的异步函数
- excel - 如何使用 Do until 或 if 语句获得非负值?
- javascript - Javascript 从文本中删除 bb_quotes ([quote..] [/quote])
- sql - 我们可以使用 SSIS 在表中插入一行并在每列中使用默认值吗?
- r - R:测试多个版本
- ruby-on-rails - 如何通过范围界定修复 Rails 6 弃用警告?
- javascript - 如何将多个子元素附加到父元素Javascript
- python - Chrome 将字段识别为自动填充的“地址”错误