1

我想知道是否有办法组成这样的表格:

library(gtsummary)
data(trial)

add_p_ex1 <-
  trial[c("marker",  "trt")] %>%
  tbl_summary(by = trt) %>%
  add_p()


add_p_ex2 <-
  trial[c("marker",  "death")] %>%
  tbl_summary(by = death) %>%
  add_p()


as1=add_p_ex1$table_body
as2=add_p_ex2$table_body
write.csv(rbind(as1, as2), file='temp1.csv')

输出是 as1 和 as2 的转置版本,如下所示: 理想情况下,对于 K - 连续变量(例如标记 1、标记 2、... maker k)和 P 个分类变量。

       Marker Level (ng/mL) Pvalue
trt 

drug A  0.84 (0.24, 1.57)   0.084746992242773
drug B  0.52 (0.19, 1.20)   

Death   

0     0.73 (0.23, 1.33)    0.605276987642371
1     0.57 (0.20, 1.45) 
4

1 回答 1

0

可以像这样得到你的表,我在下面提供了一个代码示例。但是,我不确定这是否是获得所需内容的最简单方法。

library(gtsummary)
library(tidyverse)

# function to transpose a tbl_summary table
gtsummary_transpose <- function(data, con_var, cat_var) {
  tbl <- data[c(con_var,  cat_var)] %>%
    tbl_summary(by = cat_var, missing = "no") %>%
    add_p() %>%
    modify_header(stat_by = "{level}", 
                  p.value = "p.value",
                  label = "label") %>%
    as_tibble() %>%
    select(-label) %>%
    pivot_longer(cols = -p.value) %>%
    select(name, value, p.value) 
  
  # add a header row
  bind_rows(
    tibble(name = attr(data[[cat_var]], "label") %||% cat_var),
    tbl
  ) %>%
    fill(p.value, .direction = "up") %>%
    mutate(p.value = ifelse(row_number() == 1, p.value, NA))
}

gtsummary_transpose(trial, "marker", "trt")

# transose multiple tables, and stack them 
tibble(variable = c("trt", "grade")) %>%
  mutate(
    tbl = map(variable, ~gtsummary_transpose(trial, "marker", .x))
  ) %>%
  unnest(cols = tbl) %>%
  gt::gt() %>%
  gt::cols_hide(vars(variable)) %>%
  gt::cols_label(name = "Characteristic", value = "Marker Level", p.value = "p-value") %>%
  gt::fmt_missing(columns = everything(), missing_text = "")

在此处输入图像描述

于 2020-11-03T17:50:21.427 回答