1

gt我正在使用包为我的数据创建汇总表。

最终,我需要三个表:

  1. 按年份(列)分组(行)的值
  2. 与上年相比的百分比变化(column[n] / column[n-1] - 1)
  3. 单元格的值占当年总值的百分比(所有行)

我对第一张桌子没有任何问题。

    library(gt)

    # data for three groups over two years
    d <- data.frame(
      group = c("sg1","sg2","sg3","sg1","sg2","sg3","sg1","sg2","sg3"),
      year = c(2020L,2020L,2020L, 2019L, 2019L,2019L, 2018L, 2018L,2018L),
      value = c(1234, 4321, 12345, 1432, 4212, 13214, 1332, 4112, 13114)
    )

    #convert the data to a wide format with years as columns
    d.wide <- reshape(d[order(d$year, decreasing = FALSE),], 
              varying = list(as.character(2018:2020)),
              idvar = "group",
              timevar = "year",
              direction = "wide")

    # construct the gt
    my.gt <- gt(data = d.wide, rowname_col = "group") %>%
      tab_row_group(
        group = "Row Group A",
        rows = c("sg1","sg2","sg3")
      ) %>%
      fmt_number(
        decimals = 0,
        sep_mark = ",",
        use_seps = TRUE,
        columns = names(d.wide)
      ) %>%
      summary_rows(
        groups = TRUE,
        columns = names(d.wide),
        fns = c("Group Total" = "sum"),
        decimals = 0
      ) 

上面的代码创建了下表:

gt 表按组/年显示值

这是对我正在寻找的内容的简化但准确的说明。在真实数据中,会有几个行组和几个年份列。我的解决方案需要灵活以适应不同数量的列(即,固定年数的硬编码不是理想的解决方案)。

我遇到困难的地方是计算出来的表 2 和表 3。我可以创建一个版本,d其中包含每个组/年份值的计算值(澄清一下,这个问题不是问如何在 data.frame 中计算这些值);但是,我希望summary_rows(例如“组总计”)也显示tab_row_group(例如“行组 A”中的所有行)的计算。

对于表 2(与上一年相比的百分比变化),该表如下所示(请注意省略 2018 年,因为没有上一年可供比较。):

显示所需内容的 gt 表格模型

gt功能允许您为汇总行使用用户定义的函数。

  summary_rows(
    ...
    fns = c("Group Total" = [USER FUNCTION]),
    ...
  ) 

但我无法弄清楚这可能如何与相邻列的数据交互,或者如果表使用包含预先计算的百分比的 data.frame,该数据可能是什么。

最后:除了在创建表 1 时喜欢 gt 的感觉和外观,以及我花了两天时间熟悉这个包之外,我对其他解决方案持开放态度。

我需要注意的是,展览将被导出到 MS Word 并转换为 pdf。我的首选是可以粘贴到 Word 文档中的矢量输出 (svg) 或(如在我当前的 gt_table 工作流程中)html。我知道高分辨率位图(即 png、jpeg 等)理论上应该是足够的质量;但是,过去我对包含文本的位图有过令人沮丧的经历(在 Word 中很好,但在转换为 pdf 时会丢失分辨率)。虽然我最初认为 html 是一种解决方法,但实际上我发现我喜欢这种格式,因为它让我可以灵活地在必要时对报告中的格式进行微调。

提前致谢。

安德鲁

4

0 回答 0