R gt summary_rows 比率总行
R gt summary_rows Ratio Total Row
我正在使用很棒的 gt
包来帮助在 R
中制作漂亮的表格。我真的很喜欢我如何使用它来制作总计列,但我正在努力尝试做任何超出简单 sum
或 mean
的事情。我需要为我的几个专栏做一些更像 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
列,即 sum
用于 denom
、num1
和 num2
。 gt
使用 summary_rows
函数非常简单。但是我需要的两个比率列的 TOTAL
不仅仅是 sum
。我不能只是将 rat1
和 rat2
相加以获得正确的比率。 TOTAL
列需要是 sum(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
函数提供了非常棒的格式设置而无需执行任何额外操作。
这个解决方案太糟糕了,它应该说五个冰雹玛丽和 2 个我们的父亲,但它有效...
您可以单独计算比率,然后将它们放入您的“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))
我遇到了同样的问题,除了整理代码将 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))
我正在使用很棒的 gt
包来帮助在 R
中制作漂亮的表格。我真的很喜欢我如何使用它来制作总计列,但我正在努力尝试做任何超出简单 sum
或 mean
的事情。我需要为我的几个专栏做一些更像 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
列,即 sum
用于 denom
、num1
和 num2
。 gt
使用 summary_rows
函数非常简单。但是我需要的两个比率列的 TOTAL
不仅仅是 sum
。我不能只是将 rat1
和 rat2
相加以获得正确的比率。 TOTAL
列需要是 sum(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
函数提供了非常棒的格式设置而无需执行任何额外操作。
这个解决方案太糟糕了,它应该说五个冰雹玛丽和 2 个我们的父亲,但它有效...
您可以单独计算比率,然后将它们放入您的“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))
我遇到了同样的问题,除了整理代码将 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))