# A tibble: 400 × 4
分组 时间 方法 value
<fct> <fct> <chr> <dbl>
1 实验组 实验前 方法一 22
2 实验组 实验后 方法一 31
3 对照组 实验前 方法一 51
4 对照组 实验后 方法一 31
5 实验组 实验前 方法二 34
6 实验组 实验后 方法二 25
7 对照组 实验前 方法二 52
8 对照组 实验后 方法二 35
9 实验组 实验前 方法一 32
10 实验组 实验后 方法一 37
# ℹ 390 more rows
R语言绘制三线表
R语言是数据分析和可视化领域的强大工具,今天和大家分享如何使用R语言绘制三线表来汇总统计数据。在线绘图为你提供了基于webr的在线执行R代码的方法,里面包含了本文示例及其他图表模板
示例数据
以下为随机生成的示例数据格式
单表三线表绘制
library(gtsummary)
<- function(data, variable, by, ...) {
ttest_statistic t.test(data[[variable]] ~ as.factor(data[[by]]))$statistic
}<- df %>%
gt1 filter(方法 == "方法一") %>%
pivot_wider(names_from = 分组, values_from = value) %>%
unnest(cols = c(实验组, 对照组)) %>%
select(时间, 实验组, 对照组) %>%
tbl_summary(
by = 时间,
type = everything() ~ "continuous",
statistic = list(
all_continuous() ~ "{mean} (±{sd})",
all_categorical() ~ "{p}%"
),missing = "no"
%>%
) add_p() %>%
# add_overall() %>%
add_significance_stars() %>%
add_stat(fns = everything() ~ ttest_statistic) %>%
modify_header(label = "**组别**", add_stat_1 ~ "**t**", p.value = "**p值**")
%>%
gt1 as_flex_table()
组别 | 实验前, N = 501 | 实验后, N = 501 | p值2 | t |
---|---|---|---|---|
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 |
1Mean (±SD) | ||||
2*p<0.05; **p<0.01; ***p<0.001 |
需要注意的是,gtsummary目前不支持直接添加p值对应的统计量,所以这里我们定义了一个函数 ttest_statistic
,该函数用于计算两组数据的 t 值,并通过 add_stat
添加到 统计表中。针对不同的tbl_*
函数 add_p
支持t.test
,chisq.test
,aov
等不同类型的检验,详细参数可见包说明文件,这里不一一列举。
合并多个表
gtsummary
提供了合并多个三线表的方法,支持纵向堆叠与横向合并。
纵向堆叠
<- df %>%
gt2 filter(方法 == "方法二") %>%
pivot_wider(names_from = 分组, values_from = value) %>%
unnest(cols = c(实验组, 对照组)) %>%
select(时间, 实验组, 对照组) %>%
tbl_summary(
by = 时间,
type = everything() ~ "continuous",
statistic = list(
all_continuous() ~ "{mean} (±{sd})",
all_categorical() ~ "{p}%"
),missing = "no"
%>%
) add_p() %>%
# add_overall() %>%
add_significance_stars() %>%
add_stat(fns = everything() ~ ttest_statistic) %>%
modify_header(label = "**组别**", add_stat_1 ~ "**t**", p.value = "**p值**")
<- tbl_stack(
gt tbls = list(gt1, gt2),
group_header = c("方法一", "方法二")
%>%
) modify_header(
groupname_col = "**评分方法**"
)%>%
gt modify_header(all_stat_cols() ~ "**{level}**") %>%
as_flex_table()
评分方法 | 组别 | 实验前1 | 实验后1 | p值2 | t |
---|---|---|---|---|---|
方法一 | 实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | |
方法二 | 实验组 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 | |
1Mean (±SD) | |||||
2*p<0.05; **p<0.01; ***p<0.001 |
横向堆叠
<- tbl_merge(
gt tbls = list(gt1, gt2),
tab_spanner = c("方法一", "方法二")
)%>%
gt modify_header(all_stat_cols() ~ "**{level}**") %>%
as_flex_table()
| 方法一 | 方法二 | ||||||
---|---|---|---|---|---|---|---|---|
组别 | 实验前1 | 实验后1 | p值2 | t | 实验前1 | 实验后1 | p值2 | t |
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 |
1Mean (±SD) | ||||||||
2*p<0.05; **p<0.01; ***p<0.001 |
多类型输出
上面的表格都是基于flextable
输出的表格,gtsummary
还集成了一些其他格式的输出
huxtable
%>% as_hux_table() gt
方法一 | 方法二 | |||||||
---|---|---|---|---|---|---|---|---|
组别 | 实验前 | 实验后 | p值 | t | 实验前 | 实验后 | p值 | t |
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 |
Mean (±SD) | ||||||||
*p<0.05; **p<0.01; ***p<0.001 |
kable
%>% as_kable() gt
组别 | 实验前 | 实验后 | p值 | t | 实验前 | 实验后 | p值 | t |
---|---|---|---|---|---|---|---|---|
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 |
kable_extra
%>% as_kable_extra() gt
组别 | 实验前 | 实验后 | p值 | t | 实验前 | 实验后 | p值 | t |
---|---|---|---|---|---|---|---|---|
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 |
1 Mean (±SD) | ||||||||
2 *p<0.05; **p<0.01; ***p<0.001 |
tibble
%>% as_tibble() gt
# A tibble: 2 × 9
`**组别**` `**实验前**` `**实验后**` `**p值**` `**t**` `**实验前**`
<chr> <chr> <chr> <chr> <chr> <chr>
1 实验组 27 (±6) 41 (±5) <0.001*** -12.0 34 (±3)
2 对照组 50 (±2) 41 (±27) 0.008** 2.24 55 (±4)
# ℹ 3 more variables: `**实验后**` <chr>, `**p值**` <chr>, `**t**` <chr>
gt
%>% as_gt() gt
组别 | 方法一 | 方法二 | ||||||
---|---|---|---|---|---|---|---|---|
实验前1 | 实验后1 | p值2 | t | 实验前1 | 实验后1 | p值2 | t | |
实验组 | 27 (±6) | 41 (±5) | <0.001*** | -12.0 | 34 (±3) | 23 (±7) | <0.001*** | 10.7 |
对照组 | 50 (±2) | 41 (±27) | 0.008** | 2.24 | 55 (±4) | 44 (±5) | <0.001*** | 11.9 |
1 Mean (±SD) | ||||||||
2 *p<0.05; **p<0.01; ***p<0.001 |
xlsx
输出到指定的excel也是支持的
%>% as_hux_xlsx("./gt.xlsx") gt