参考:https://www.twblogs.net/a/5c74cddcbd9eee339917b7b2

https://towardsdatascience.com/exploring-the-gt-grammar-of-tables-package-in-r-7fff9d0b40cd

前言

想到表格,是不是就是excel,或者直接用ppt 来肝?

R 天然的就有强大的处理数据生成各种表格的能力,岂不美哉?

今天就来学习一下gt 包:

021. 用R制作漂亮的表格 - 图1

学习网址:https://gt.rstudio.com/

我的目标是画出:

021. 用R制作漂亮的表格 - 图2

获取内容

021. 用R制作漂亮的表格 - 图3

其实也就是标准的数据框格式。

需要注意的是,当导入gt 中绘制表格时,会忽略掉行名与列名。

开始操作

0.基本表格

加载相关包。

尝试直接用gt 获得最基本的图表:

  1. library(gt)
  2. library(tidyverse)
  3. library(glue)
  4. gt(gt_data)

021. 用R制作漂亮的表格 - 图4

1. 添加行名的标签

也就是:

021. 用R制作漂亮的表格 - 图5

可以直接在gt 函数中指定rowname_col

ps:其中的行的组别可以用参数groupname_col 特别指定,也可以使用重复的名称,直接给rowname_col 指定多个值。

  1. gt_tbl <- gt_data %>%
  2. gt(rowname_col = "names", "group_label")

021. 用R制作漂亮的表格 - 图6

2. 头部信息

tab_header 可以添加头信息,其中title 与subtitle 分别对应标题和子标题:

  1. gt_tbl <-
  2. gt_tbl %>%
  3. tab_header(
  4. title = md("**Comparison of genomic alterations**"),
  5. subtitle = md("between *BRCA1/2* mutation carriers and non-carriers Among different prognostic variables")
  6. )
  7. gt_tbl

这里使用md() 可以在文本内容中支持md 语法:

021. 用R制作漂亮的表格 - 图7

3. 添加分组和行的标签名(stubhead label)

使用tab_spanner 函数添加分组,label 指定分组名,columns指定同一分组的多个列。需要使用vars 选定这些列名:

  1. gt_tbl <-
  2. gt_tbl %>%
  3. tab_spanner(
  4. label = "BRCA1",
  5. columns = vars(`carrier(N=17)`, `non-carrier(N=262)`, `P-value-1`)
  6. ) %>%
  7. tab_spanner(
  8. label = "BRCA2",
  9. columns = vars(`carrier(N=7)`, `non-carrier(N=272)`, `P-value-2`)
  10. ) %>%
  11. tab_stubhead(label = md("**Variables**"))
  12. gt_tbl

021. 用R制作漂亮的表格 - 图8

4. 修改文本字体位置

  1. gt_tbl <-
  2. gt_tbl %>%
  3. tab_style(
  4. style = list(
  5. cell_text(font = "Oswald",
  6. align = "center",
  7. weight = "bold")
  8. ),
  9. locations = list(
  10. cells_data(everything())
  11. )
  12. )

使用tab_style 命令调整,其中style 指定文本风格,locations 指定文本设定的位置(标题、数据、信息框等等),比如cells_data 就是指定body cell的:

021. 用R制作漂亮的表格 - 图9

效果如下:

021. 用R制作漂亮的表格 - 图10

我们还可以指定某个cell 以突出其中内容:

  1. ## 设置字体
  2. gt_tbl <-
  3. gt_tbl %>%
  4. tab_style(
  5. style = list(
  6. cell_text(
  7. weight = "bold"
  8. ),
  9. cell_fill(color = "#F9E3D6")
  10. ),
  11. cells_body(
  12. columns = vars(`P-value-1`),
  13. rows = `P-value-1` <= 0.05)
  14. )
  15. gt_tbl

021. 用R制作漂亮的表格 - 图11

5. 给表格增加一个背景色

tab_options 函数是专门用来调节列表的输出内容的,这里不多赘述,只用来添加背景色:

  1. ## 设置背景
  2. gt_tbl %>%
  3. tab_options(
  4. table.background.color = "lightcyan"
  5. )

021. 用R制作漂亮的表格 - 图12

6. 合并重复数值

在我的图表中,对应的P 值是重复的,不太好看:

021. 用R制作漂亮的表格 - 图13

这里我直接在edit 中手动将重复的删除(你也可以写代码),就会产生NA 值。

接着使用fmt_missing 函数,便可以实现替换缺失值:

  1. ## 去除NA 值
  2. gt_tbl <- gt_tbl %>%
  3. fmt_missing(
  4. columns = TRUE,
  5. missing_text = ""
  6. )
  7. gt_tbl

021. 用R制作漂亮的表格 - 图14

当然我这里是“曲线修改”了,如果可以像excel中直接合并单元格是更好的了。

7. 表格的输出

可以用gtsave 直接保存为多种类型的数据:

  • html
  1. gt_tbl %>% gtsave("tab_1.html")
  • PNG&PDF
  1. # tab_1 %>% gtsave("tab_1.png", zoom = 2.5, expand = 10)
  2. # tab_1 %>% gtsave("tab_1.pdf", path = "~")

更多学习的内容

可以参见gt 包官方提供的r cloud 测试服务:

https://rstudio.cloud/project/779965

021. 用R制作漂亮的表格 - 图15