计算 {gt} 表中的同比变化和其他汇总 [r]

时间:2021-05-02 23:36:24

标签: r gt

我正在使用 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 table showing values by group / year

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

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

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

gt table mock-up showing desired content

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

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

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

最后:除了喜欢 gt 在创建表 1 时的感觉和外观以及我花了两天时间熟悉该包之外,我愿意接受其他解决方案。

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

提前致谢。

安德鲁

0 个答案:

没有答案