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", "正常")), "正常"
)
15 交互表格
表格常用来汇总展示数据,交互表格附带更多的功能,可以按列分组、排序、搜索,也可以按行分组、折叠,还可以上下滚动、左右滚动、前后翻页、页面挑转、导出数据等。交互表格是需要放在网页中的,制作这样的表格需要谢益辉开发的 DT 包,它的覆盖测试达到 31%, 它基于 jQuery 框架的衍生品 DataTables 库,提供了一个 R 的封装,封装工具和许多其他基于 JS 库的 R 包一样,都依赖于 htmlwidgets。
15.1 基础功能
15.1.1 创建表格
15.1.2 添加标题
15.1.4 水平滚动
15.1.5 垂直滚动
15.1.6 数据分页
15.1.7 适应宽度
15.1.8 行列分组
15.1.9 列格式化
15.1.10 数据配色
根据数据的大小配上颜色
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 )
}
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 包信息
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 列
)
)
)