Мне нужна помощь в округлении последней цифры до 0 или 5 в выходной таблице gtsummary. Буду признателен за любую оказанную помощь
library(tidyverse)
library(gtsummary)
data %>%
tbl_summary(
by = hba1c,
include = -id
)
вот данные
structure(list(id = 1:100, age = c("a", "a", "b", "a", "b", "b",
"b", "c", "c", "c", "a", "a", "b", "a", "b", "b", "b", "c", "c",
"c", "a", "a", "b", "a", "b", "b", "b", "c", "c", "c", "a", "a",
"b", "a", "b", "b", "b", "c", "c", "c", "a", "a", "b", "a", "b",
"b", "b", "c", "c", "c", "a", "a", "b", "a", "b", "b", "b", "c",
"c", "c", "a", "a", "b", "a", "b", "b", "b", "c", "c", "c", "a",
"a", "b", "a", "b", "b", "b", "c", "c", "c", "a", "a", "b", "a",
"b", "b", "b", "c", "c", "c", "a", "a", "b", "a", "b", "b", "b",
"c", "c", "c"), sex = c("M", "F", "M", "M", "M", "F", "F", "F",
"F", "M", "F", "M", "M", "M", "F", "F", "F", "F", "M", "F", "M",
"M", "M", "F", "F", "F", "F", "M", "F", "M", "M", "M", "F", "F",
"F", "F", "M", "F", "M", "M", "M", "F", "F", "F", "F", "M", "F",
"M", "M", "M", "F", "F", "F", "F", "M", "F", "M", "M", "M", "F",
"F", "F", "F", "M", "F", "M", "M", "M", "F", "F", "F", "F", "M",
"M", "F", "F", "F", "F", "M", "F", "M", "M", "M", "F", "F", "F",
"F", "M", "M", "F", "F", "F", "F", "M", "F", "M", "M", "M", "F",
"F"), country = c("eng", "eng", "eng", "eng", "wale", "wale",
"wale", "scot", "scot", "scot", "eng", "eng", "eng", "eng", "wale",
"wale", "wale", "scot", "scot", "scot", "eng", "eng", "eng",
"eng", "wale", "wale", "wale", "scot", "scot", "scot", "eng",
"eng", "eng", "eng", "wale", "wale", "wale", "scot", "scot",
"scot", "eng", "eng", "eng", "eng", "wale", "wale", "wale", "scot",
"scot", "scot", "eng", "eng", "eng", "eng", "wale", "wale", "wale",
"scot", "scot", "scot", "eng", "eng", "eng", "eng", "wale", "wale",
"wale", "scot", "scot", "scot", "eng", "eng", "eng", "eng", "wale",
"wale", "wale", "scot", "scot", "scot", "eng", "eng", "eng",
"eng", "wale", "wale", "wale", "scot", "scot", "scot", "eng",
"eng", "eng", "eng", "wale", "wale", "wale", "scot", "scot",
"scot"), edu = c("x", "x", "x", "y", "y", "y", "z", "z", "z",
"z", "x", "x", "x", "y", "y", "y", "z", "z", "z", "z", "x", "x",
"x", "y", "y", "y", "z", "z", "z", "z", "x", "x", "x", "y", "y",
"y", "z", "z", "z", "z", "x", "x", "x", "y", "y", "y", "z", "z",
"z", "z", "x", "x", "x", "y", "y", "y", "z", "z", "z", "z", "x",
"x", "x", "y", "y", "y", "z", "z", "z", "z", "x", "x", "x", "y",
"y", "y", "z", "z", "z", "z", "x", "x", "x", "y", "y", "y", "z",
"z", "z", "z", "x", "x", "x", "y", "y", "y", "z", "z", "z", "z"
), hba1c = c(1L, 1L, 1L, 1L, 1L, 1L, NA, NA, NA, 1L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, NA, NA, NA, NA, NA, NA,
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, NA, NA, NA, NA, NA, NA, NA, NA, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
NA, NA, NA, NA, NA, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA,
-100L))
Для этого вы можете создать свою собственную функцию стиля.
round_05 <- function(x) {
ceiling(x/5) * 5
}
А затем используйте его в своем вызове tbl_summary
, чтобы округлить частоты, сохранив проценты как есть. Если вы тоже хотите округлить проценты, создайте еще одну аналогичную функцию, которая сначала умножает x
на 100, и замените «0» этой функцией.
df %>%
tbl_summary(
by = hba1c,
include = -id,
digits=list(everything() ~ c(round_05, 0))
# digits=list(everything() ~ c(round_05, round_pct))
)
Это должно сработать. Но обратите внимание, что округление n до 0 или 5 почти наверняка приведет к тому, что эти суммы не прибавятся к общему «N».
Спасибо за ваш ответ. это не сработало.
Попробуйте это: df %>% tbl_summary(by=hba1c, include=-id, digits=list(everything() ~ c(round_05, 0))) %>% add_n()
спасибо, извините, я не достаточно ясно выразился. округление работает для hb1c= 0 и hba1c =1, но округление не работает для столбца n, т.е. add_n()
AFAICT, add_n()
не поддерживает функцию стилизации.
есть ли способ это исправить?
Я думаю, вам стоит попробовать задать это в другом вопросе.
спасибо, я сделаю это. просто хотел спросить, как я могу добавить разделитель-запятую в моем формате чисел в этом сводном выводе, поскольку у меня довольно большое число
В функции round_05
измените на: prettyNum(ceiling(x/5) * 5, big.mark = ",")
@ Эдвард, спасибо, это сработало
Спасибо за вашу помощь. это сработало. просто хочу уточнить, хочу ли я добавить add_n в свой код, а также хочу, чтобы здесь было округление, так как мне изменить этот код df %>% tbl_summary( by = hba1c, include = -id, digits=list(everything( ) ~ c(round_05, 0)) # digits=list(everything() ~ c(round_05, round_pct)) ) %>% add_n()