【问题标题】:How to create efficiently multiple tables (and flextable) using function/loop in R?如何使用 R 中的函数/循环有效地创建多个表(和灵活表)?
【发布时间】:2022-10-15 04:26:30
【问题描述】:

我正在尝试在 R 中执行一项非常简单的任务,即为我拥有的每个数据集(dataset_1、dataset_2、...、dataset_35)创建一个 Flextable(称为 Flextable_1、Flextable_2、...、Flextable_35)。

第一个 Flextable_1 的代码是:

Flextable_1 <- 
  flextable(dataset_1)  %>% 
  add_header_row(top = TRUE, values = c("", "Total","CountyA","CountyB"), colwidths = c(1,4,4,4)) %>% 
  theme_vanilla()%>% 
  color(dataset_1, part = "footer", color = "#666666")%>%
  autofit(part = "all")%>%
  align(align = "center", part = "all") %>% 
  merge_h(part = "header")%>%
  merge_v(part = "header")%>%
  set_caption(caption = "Summary Statistics for 0.1Miles Buffer Area")%>%
  add_footer_lines("")%>%
  fontsize(size = 10, part = "all")%>%
  fontsize(size = 10, part = "header", i = 2) %>%
  fontsize(size = 14, part = "header", i = 1) 

因此,从 2 到 35 的所有数据集的代码将是(仅显示第 35 个):

Flextable_35 <- 
  flextable(dataset_35)  %>% 
  add_header_row(top = TRUE, values = c("", "Total","CountyA","CountyB"), colwidths = c(1,4,4,4)) %>% 
  theme_vanilla()%>% 
  color(dataset_35, part = "footer", color = "#666666")%>%
  autofit(part = "all")%>%
  align(align = "center", part = "all") %>% 
  merge_h(part = "header")%>%
  merge_v(part = "header")%>%
  set_caption(caption = "Summary Statistics for 0.35Miles Buffer Area")%>%
  add_footer_lines("")%>%
  fontsize(size = 10, part = "all")%>%
  fontsize(size = 10, part = "header", i = 2) %>%
  fontsize(size = 14, part = "header", i = 1) 

我怎样才能以有效的方式做到这一点,这样我就不必为每个数据集(从 1 到 35)编写所有这些行?另请注意,foreach 表的标题会根据我正在使用的数据集的数量而变化。所以 Flextable_1 的标题是“汇总统计0.1Miles Buffer Area”,而 Flextable_35 的标题是“Summary Statistics for0.35万里缓冲区"

提前谢谢了。任何帮助都非常感谢!

【问题讨论】:

    标签: function loops flextable


    【解决方案1】:

    我为您的任务创建了一个函数。该函数完成任务并将结果分配给全局环境。函数中有一个参数,表数;这将在循环中用于遍历不同的表。

    library(dplyr)
    library(flextable)
    
    # Create a function that constructs tables
    create_flextable <- function(number_table = 1) {
      
      # Get the table you need
      start <- "dataset_"
      table <- get(paste0(start, number_table))
      
      # Run Process
      Flextable <- 
        flextable(table)  %>% 
        add_header_row(top = TRUE, values = c("", "Total","CountyA","CountyB"), colwidths = c(1,4,4,4)) %>% 
        theme_vanilla()%>% 
        color(table, part = "footer", color = "#666666")%>%
        autofit(part = "all")%>%
        align(align = "center", part = "all") %>% 
        merge_h(part = "header")%>%
        merge_v(part = "header")%>%
        set_caption(caption = paste0("Summary Statistics for 0.", number_table, "Miles Buffer Area"))%>%
        add_footer_lines("")%>%
        fontsize(size = 10, part = "all")%>%
        fontsize(size = 10, part = "header", i = 2) %>%
        fontsize(size = 14, part = "header", i = 1) 
      
      # Assigned constructed table to global environment
      assign(paste0("Flextable_", number_table), Flextable, envir = .GlobalEnv)
      
    }
    
    # Run loop to create multiple tables
    for (i in 1:1) {
      
      create_flextable(number_table = i)
      
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2016-05-11
      • 2022-06-14
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多