0

我正在使用出色的gt软件包来帮助在R. 我真的很喜欢如何使用它来制作 Total 列,但我正在努力尝试做任何超出简单summean. 我需要为我的几个专栏做一些更像 SUMPRODUCT 的事情。假设我有以下数据。它有一denom列我想将几个分子除以。

library(dplyr)
library(gt)
set.seed(1)
df <- data.frame(some_letter = sample(letters, size = 10, replace = FALSE),
                 denom = sample(1:100, size = 10, replace = FALSE), 
                 num1 = sample(100:200, size = 10, replace = FALSE),
                 num2 = sample(100:200, size = 10, replace = FALSE)) %>% 
  mutate(rat1 = round(num1 / denom, 2), 
         rat2 = round(num2 / denom, 2))

some_letter denom num1 num2  rat1  rat2
1            y    54  188  119  3.48  2.20
2            d    74  143  127  1.93  1.72
3            g     7  178  200 25.43 28.57
4            a    73  132  143  1.81  1.96
5            b    79  183  186  2.32  2.35
6            k    85  134  169  1.58  1.99
7            n    37  169  139  4.57  3.76
8            r    89  173  197  1.94  2.21
9            w    94  141  124  1.50  1.32
10           j    34  137  195  4.03  5.74

所以我想得到一个TOTAL列是sumfordenom和。使用该功能非常容易。但我需要的两个比率列不仅如此。我不能只是加起来得到正确的比例。这些列必须是and 。num1num2gtsummary_rowsTOTALsumrat1rat2TOTALsum(num1) / sum(denom)sum(num1) / sum(denom)

所以这适用于简单的列。

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), 
               columns = vars(denom, num1, num2)) 

在此处输入图像描述

对于其他列,我尝试了以下方法无济于事。

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), 
               columns = vars(denom, num1, num2)) %>% 
  summary_rows(fns = list(TOTAL = ~sum(.) / sum(denom)), columns = vars(rat1, rat2))

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), 
               columns = vars(denom, num1, num2)) %>% 
  summary_rows(fns = list(TOTAL = sum(.) / sum(denom)), columns = vars(rat1, rat2))

而且我知道我可以单独计算它并将rbind其放在底部,但是该summary_rows函数提供了非常棒的格式,而无需做任何额外的事情。

4

2 回答 2

1

我遇到了同样的问题,除了整理代码传递r1_total和函数r2_total的方式之外,没有找到更好的解决方案:summary_rows( )

r1_total <- sum(df$num1) /  sum(df$denom)
r2_total <- sum(df$num2) /  sum(df$denom)

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), columns = vars(denom, num1, num2)) %>% 
  summary_rows(fns = list(TOTAL = ~ c(r1_total), columns = vars(rat1)) %>% 
  summary_rows(fns = list(TOTAL = ~ c(r2_total), columns = vars(rat2)) 

或者

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), columns = vars(denom, num1, num2)) %>% 
  summary_rows(fns = list(TOTAL = ~ sum(df$num1) /  sum(df$denom) ), columns = vars(rat1)) %>% 
  summary_rows(fns = list(TOTAL = ~ sum(df$num2) /  sum(df$denom) ), columns = vars(rat2)) 
于 2020-07-22T16:57:38.833 回答
0

这个解决方案太糟糕了,应该说五个 Hail Marys 和 2 Our Fathers,但它确实有效......

您可以单独计算比率,然后将它们放入您的 " fns" 调用中。看起来它不能只取两倍,所以你必须除以sum(1). 肯定很丑,可能可以用一个函数清理一下,但它似乎有效。

r1_total <- sum(df$num1) /  sum(df$denom)
r2_total <- sum(df$num2) /  sum(df$denom)

gt(df) %>% 
  summary_rows(fns = list(TOTAL = "sum"), 
               columns = vars(denom, num1, num2)) %>% 
  summary_rows(fns = list(TOTAL = ~ r1_total / sum(1) ), columns = vars(rat1)) %>% 
  summary_rows(fns = list(TOTAL = ~ r2_total / sum(1) ), columns = vars(rat2)) 

在此处输入图像描述

于 2020-06-23T19:02:53.413 回答