如何使用gt table 将组移动到列?

问题描述 投票:0回答:1

我正在使用 gt 包制作汇总表。我想稍微简化输出,并将时间点显示为列而不是行。现在我将每个点作为单独的行,例如:

标签 估计 p值
案例时间1 xx xx
控制时间1 xx xx
案例时间2 xx xx
控制时间2 xx xx

我希望能更像这样组织它:

标签 时间1 时间2
估计 p 值 估计 p 值
案例 xx xx xx xx
控制 xx xx xx xx

我有变量“case_control”,它只是案例和控制分配,“时间”是时间点

rbind(H_LG3, W_LG3) %>%
gt()%>%
  fmt_number(
    columns = everything(),
    decimals = 3)%>%
    tab_row_group(group = md('**H**'), rows = 1:nrow(H_LG3)) %>%
    tab_row_group(group = md('**W**'), rows = (nrow(H_LG3) + 1):(nrow(H_LG3) + nrow(W_LG3))%>%
  cols_label(
    label=md("**Label**"),
    estimate_ci=md("**Estimate(CI)**"),
    formatted_p_value=md("**P Value**")
  )%>%
  tab_header(md("**Table 4**"))

我还在这一步中合并了两个表格,但它们只是垂直堆叠并贴上标签。这些列是“标签”“estimate_ci”“p_val”“时间”和“case_control”

r gt
1个回答
0
投票

这是一种可能的方法:

library(tidyverse)
library(tidyselect)
library(gt)

df <- tribble(
  ~label, ~estimate, ~p_value,
  "case time 1", 4, 21,
  "control time 1", 5, 22,
  "case time 2", 6, 23,
  "control time 2", 7, 24
)

df %>%
  separate_wider_delim(label, delim = " time ", names = c("label", "time")) %>%
  pivot_wider(
    names_from = time,
    values_from = c(estimate, p_value),
    names_glue = "time{time},{.value}"
  ) |>
  select(sort(peek_vars())) %>%
  gt() %>%
  tab_spanner_delim(delim = ",")

创建于 2024-03-28,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.