forked from XiangyunHuang/data-analysis-in-action
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinteractive-tables.qmd
executable file
·122 lines (94 loc) · 4.05 KB
/
interactive-tables.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# 交互表格 {#sec-interactive-tables}
表格常用来汇总展示数据,交互表格附带更多的功能,可以按列分组、排序、搜索,也可以按行分组、折叠,还可以上下滚动、左右滚动、前后翻页、页面挑转、导出数据等。交互表格是需要放在网页中的,制作这样的表格需要谢益辉开发的 [**DT**](https://github.com/rstudio/DT) 包,它的覆盖测试达到 31%, 它基于 [jQuery](https://jquery.com/) 框架的衍生品 [DataTables](https://datatables.net/) 库,提供了一个 R 的封装,封装工具和许多其他基于 JS 库的 R 包一样,都依赖于 [**htmlwidgets**](https://github.com/ramnathv/htmlwidgets)。
## 基础功能 {#sec-table-basic}
### 创建表格 {#sec-table-create}
### 添加标题 {#sec-table-title}
### 添加注释 {#sec-table-caption}
### 水平滚动 {#sec-table-scrollx}
### 垂直滚动 {#sec-table-scrolly}
### 数据分页 {#sec-table-pagination}
### 适应宽度 {#sec-table-autofill}
### 行列分组 {#sec-rowcolumn-group}
### 列格式化 {#sec-render-column}
### 数据配色 {#sec-colorize-column}
```{r}
library(tibble)
dat <- tribble(
~name1, ~name2,
as.character(htmltools::tags$b("加粗")), as.character(htmltools::a(href = "https://rstudio.com", "超链")), # 支持超链接
as.character(htmltools::em("强调")), '<a href="#" onclick="alert(\'Hello World\');">Hello</a>',
as.character(htmltools::span(style = "color:red", "正常")), "正常"
)
```
根据数据的大小配上颜色
```{r}
colorize_num <- function(x) {
ifelse(x > 0,
sprintf("<span style='color:%s'>%s</span>", "green", x),
sprintf("<span style='color:%s'>%s</span>", "red", x)
)
}
colorize_pct <- function(x) {
ifelse(x > 0,
sprintf("<span style='color:%s'>%s</span>", "green", scales::percent(x, accuracy = 0.01)),
sprintf("<span style='color:%s'>%s</span>", "red", scales::percent(x, accuracy = 0.01))
)
}
colorize_pp <- function(x) {
ifelse(x > 0,
sprintf("<span style='color:%s'>%s</span>", "green", paste0(round(100*x, digits = 2), "PP")),
sprintf("<span style='color:%s'>%s</span>", "red", paste0(round(100*x, digits = 2), "PP"))
)
}
colorize_text <- function(x, color = "red") {
sprintf("<span style='color:%s'>%s</span>", color, x )
}
```
```{r}
#| label: tbl-table-colorize
#| tbl-cap: "数据配色"
library(DT)
datatable(
data = dat, escape = FALSE,
colnames = c(colorize_text("第1列", "red"),
as.character(htmltools::em("第2列"))),
options = list(
pageLength = 5, # 每页显示5行
dom = "t"
)
)
```
Base R 内置的 R 包含有丰富的数据集,非常适合演示图形和阐述统计理论,后面技术和理论部分的介绍大多围绕内置的数据集展开,数据集及其描述如下表所示:
```{r}
#| label: tbl-datasets
#| tbl-cap: Base R 包内置的数据集
# 抽取 R 包信息
Pkgs <- sapply(list.files(R.home("library")), function(x) {
packageDescription(pkg = x, fields = "Priority")
})
# 抽取内置 R 包列表
CorePkgs <- names(Pkgs[Pkgs %in% c("base", "recommended") & !is.na(Pkgs)])
# 抽取 R 包的数据集
BaseDataSets <- data(package = CorePkgs)$results[, c("Package", "Item", "Title")]
library(DT)
datatable(BaseDataSets,
rownames = FALSE, # 不显示行名
extensions = c("Buttons", "RowGroup"),
options = list(
pageLength = 10, # 每页显示的行数
language = list(url = "//cdn.datatables.net/plug-ins/1.10.11/i18n/Chinese.json"), # 汉化
dom = "Bfrtp", # 去掉显示行数 i、过滤 f 的能力,翻页用 p 表示
ordering = F, # 去掉列排序
buttons = c("copy", "csv", "excel", "print"), # 提供打印按钮
rowGroup = list(dataSrc = 0), # 按 Package 列分组
columnDefs = list(
list(className = "dt-center", targets = 0), # 不显示行名,则 targets 从 0 开始,否则从 1 开始
list(visible = FALSE, targets = 0) # 不显示 Package 列
)
)
)
```
## 扩展功能 {#sec-table-extend}
### 汉化表格 {#sec-table-chinese}
### 下载数据 {#sec-table-download}
## 其它工具 {#sec-table-reactable}