Сейчас занимаюсь следующей проблемой:
Мои данные были собраны за два периода времени и между двумя разными группами.
Я пытаюсь получить сводную таблицу с помощью t-теста, используя gtsummary::tbl_summary() и tbl_strata().
К сожалению, я не могу понять, как получить охватывающий заголовок для двух моментов времени (первый и второй), сохраняя при этом структуру таблицы одинаковой (в основном порядок столбцов).
Ниже приведен воспроизводимый пример. Заранее большое спасибо за любую помощь!
#Create df
df <- data.frame(
id = rep(c(1, 2, 3), each = 4, time = 1),
var_01 = sample(1:5, 12, replace = TRUE),
var_02 = sample(1:5, 12, replace = TRUE),
group = rep(c("A", "B"), each = 2, times = 3),
time = rep(c("first", "second"), each = 1, times = 6)
)
#Current best attempt at the summary table
df |>
tbl_strata(
strata = group,
.tbl_fun =
~ .x |>
tbl_summary(
include = -id,
by = time,
type = contains("var") ~ "continuous",
statistic = list(
contains("var") ~ "{mean} ({sd})"
),
missing = "no"
) |>
add_difference(
test = everything() ~ "paired.t.test",
group = id,
),
.header = "**Group {strata}**"
)
Редактировать:
Два показывают это визуально (примеры имеют разное оформление, поскольку первый взят из R, а второй отредактирован в word):
Моя текущая таблица:
Цель того, как бы мне хотелось, чтобы таблица выглядела:
Привет, Дэниел, спасибо, что обратился. Я предоставил изображение текущей таблицы и того, как она должна выглядеть. PS: Просто хотел сказать, что нашел этот пакет вчера, и он действительно потрясающий и полезный....так что спасибо :)
Спасибо за обновление! Еще один вопрос: вы рисуете свою таблицу с помощью {gt} или конвертируете в {flextable} (или что-то еще)?
Я уже пробовал {gt}. Если {flextable} лучше подходит для решения проблемы, я обязательно рассмотрю ее.
На данный момент (и это то, что мы собираемся изменить в ближайшее время) gtsummary поддерживает только одну строку заголовка. Чтобы получить вторую строку, вам нужно преобразовать объект в таблицу {gt}, а затем использовать gt::tab_spanner(level = 2)
, чтобы добавить второй уровень охватывающего заголовка. Пример ниже!
library(gtsummary)
packageVersion("gtsummary")
#> [1] '2.0.1.9002'
#Create df
df <- data.frame(
id = rep(c(1, 2, 3), each = 4, time = 1),
var_01 = sample(1:5, 12, replace = TRUE),
var_02 = sample(1:5, 12, replace = TRUE),
group = rep(c("A", "B"), each = 2, times = 3),
time = rep(c("first", "second"), each = 1, times = 6)
)
#Current best attempt at the summary table
tbl <- df |>
tbl_strata(
strata = group,
.tbl_fun =
~ .x |>
tbl_summary(
include = -id,
by = time,
type = contains("var") ~ "continuous",
statistic = list(
contains("var") ~ "{mean} ({sd})"
),
missing = "no"
) |>
add_difference(
test = everything() ~ "paired.t.test",
group = id,
)
) |>
modify_spanning_header(everything() ~ NA) |> # reset default header
modify_spanning_header(all_stat_cols() ~ "**Timepoint**") |>
as_gt() |>
gt::tab_spanner(
label = gt::md("**Group A**"),
columns = ends_with("_1"),
level = 2L
) |>
gt::tab_spanner(
label = gt::md("**Group B**"),
columns = ends_with("_2"),
level = 2L
)
Created on 2024-08-29 with reprex v2.1.1
Спасибо! Это красивое решение. Я попробовал использовать tab_spanner, но мне не удалось выбрать правильные столбцы. End_with() прекрасно решает эту проблему. И еще раз спасибо за посылку! Мне было очень весело создавать несколько больших таблиц за последние два дня :D
В каком порядке вы хотите, чтобы столбцы были? Можете ли вы смоделировать, как должна выглядеть таблица?