R gt summary_rows Соотношение Итоговая строка
Я использую отличный gt
пакет, который поможет сделать красивые таблицы в R
. Мне очень нравится, как я могу использовать его для создания столбцов Total, но я изо всех сил пытаюсь сделать что-нибудь, кроме простогоsum
или mean
. Мне нужно сделать что-то вроде СУММПРОИЗВ для пары моих столбцов. Допустим, у меня есть следующие данные. Оно имеет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 ответа
У меня та же проблема, и я не нашел лучшего решения, кроме как навести порядок в прохождении кода. 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))
Это решение настолько плохое, что в нем должно быть написано пять "Да здравствует Мария" и 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))