R 循环可帮助运行 100 个不同的相同 Excel 工作表、创建条形图并导出到文件夹

问题描述 投票:0回答:1

请耐心等待,因为我不完全确定如何为我的问题创建一个可重现的示例。我是使用循环的新手,希望得到一些建议。我的任务是使用 100 个不同的 Excel 工作表(格式完全相同)为 100 个不同的医院创建条形图,并通过每张图片的医院 ID 将每个条形图导出到文件夹中。目前,我拥有的代码允许我执行此操作,但我必须手动进入并更改医院名称,然后运行代码,它将导出条形图。但是,我正在尝试创建一个循环,因此当我列出所有医院的列表时,它会自动循环并创建 100 个条形图。这是我的代码:

我将更改此处每家医院的 OHT_list 和 OHT_,然后运行代码的第二部分,它将创建条形图。

# Define my list 
OHT_list <- c("Hospital 1")  #I would need to change this for each hospital and run the below code
OHT_ <- c("H1") ##I would need to change this for each hospital and run the below code
SegmentType <- "Segment A" #can be segment A/B/C
Indicator <- "Indicator A"  
Years <- "2022/23"

这是创建条形图并将其导出到文件路径的代码

if (SegmentType == "Segment A" || SegmentType == "Segment B" || SegmentType=="Segment C") {
  combined_data <- list()
  
  # Find Folder Names to access based on OHT_list elements (numeric values)
  for (OHT in OHT_list) {
    
    ending <- sub(".*?(\\d+).*", "\\1", OHT)
    
    file_name <- paste0("SegmentationResults_", SegmentType, "_", ending, ".xlsx")
    file_path <- file.path("C:\downloads", OHT, file_name)

  
   data <- read_excel(file_path, sheet = "xx")
  
  # Filter out "all" row and save relevant years
  filtered_data <- all_data %>%
    filter(`Reporting Period` == Years & `Segment Label` != "")

  # Colors
  colors_sequence <- c("#0A1A31", "#C7EA95", "#2E80BC", "#EE654F", "#7BB4A9")
  color_map <- rep(colors_sequence, length.out = length(unique(filtered_data$OHT)))
  names(color_map) <- unique(filtered_data$OHT)

  file_name <- paste0("fig_", SegmentType, "_", ending, ".png")
  file_path <- file.path ("C:/downloads/IndicatorA", file_name)
  
  png(file_path, width = 1400, height = 900)

  plot <- filtered_data %>%
   ggplot(aes(x = yy, y = `xx`)) +
  geom_bar(stat="identity", fill="#0A1A31")+
    scale_y_continuous(expand = expansion(mult = c(0, .10)))+
  scale_fill_manual(values = c())+
  coord_flip() +
  theme_minimal(base_size = 35) +
  theme(plot.title = element_text(hjust = 0.5))+
  theme(legend.title = element_blank(), legend.position = "bottom", legend.spacing.y = unit(-0.5, "cm"), legend.text = element_text(size=25))
  
  plot
    
}

  dev.off()

r loops ggplot2 data-manipulation
1个回答
0
投票

不知道当前方法背后的推理......这听起来像是一个非常糟糕的架构决策。

给这只猫剥皮的方法有很多。

跟我重复一遍...Excel 不是数据库。

如果输出是本地文件夹中的条形图图像,那就更糟了。

我假设需要实时访问这些数据 - 而不是手动运行这些命令、手动整理这些 Excel 文件、手动将输出条形图共享给相关个人等。

对于这些体力活动来说,生命太短暂了。

如果我正在应对这个挑战,我会采取完全不同的方式。

Excel 文件 --> 提取/上传到“验证器”中 --> 如果有效,则自动导入到数据库中 --> 然后使用您选择的 JavaScript 图表工具通过基本 Web 应用程序查看输出。

不直接回答您的问题,但提供您可能想要考虑的答案。

© www.soinside.com 2019 - 2024. All rights reserved.