在使用 Rmarkdown 或 Shiny 写报告时总会遇到 table 展示的困扰
有幸了解到益辉大神的DT包,如厕后的畅快感又一次降临了
函数参数简介
datatable(data, options = list(),
class = "display",
callback = JS("return table;"),
rownames,
colnames,
container,
caption = NULL,
filter = c("none", "bottom","top"),
escape = TRUE,
style = "default",
width = NULL,
height = NULL,
elementId = NULL,
fillContainer = getOption("DT.fillContainer", NULL),
autoHideNavigation = getOption("DT.autoHideNavigation",NULL),
selection = c("multiple", "single", "none"),
extensions = list(),
plugins = NULL)
各项参数功能实例
示例数据准备
library(DT)
m = cbind(matrix(rnorm(60, 1e5, 1e6), 20), runif(20), rnorm(20, 100))
dim(m)
m[, 1:3] = round(m[, 1:3])
m[, 4:5] = round(m[, 4:5], 7)
colnames(m) = head(LETTERS, ncol(m))
head(m)
A B C D E
[1,] 1447159 -288199 -790697 0.8517458 100.68543
[2,] -204256 -260374 1783257 0.4864743 101.26310
[3,] 140063 -698646 -316450 0.5513788 99.95794
[4,] 170153 250854 -21752 0.3009611 101.35218
[5,] -899676 -1146587 -947206 0.4223725 102.43825
[6,] 279729 -377690 1411022 0.5134331 98.57725
列调整
货币/百分比/小数点 调整
sketch = htmltools::withTags(table(
class = 'display',
thead(
tr(
#th(rowspan = 2, 'Species'),
th(colspan = 3, 'A'),
th(colspan = 2, 'D'),
th(colspan = 3, 'E')
),
tr(
lapply(c(1:3,1:2,1:3), th)
)
)
))
#print(sketch)
datatable(head(m[,c(1,1,1,4,4,5,5,5)],3),
container = sketch, # 设置表头格式
class='stripe', # 鼠标悬停,整行突出显示
caption = 'Table 1: Format Columns') %>% # 标题
formatCurrency(1:3, c('\U20AC','$','\U00A5'),# 货币形式
digits = c(1,0,2)) %>%
formatPercentage(5, 2) %>% # 百分比形式
formatRound('E', 3) %>% # 小数点位数
formatRound(c(7,8), c(2,1)) # 小数点位数
时间格式调整
x = strptime('2015-07-23 22:05:21',
'%Y-%m-%d %H:%M:%S', tz = 'EST')
(x = x + seq(1, 1e6, length.out = 10))
m = c('toDateString', 'toLocaleDateString',
'toLocaleString', 'toUTCString')
d = as.data.frame(setNames(lapply(m, function(.) x), m))
str(d)
datatable(d, options = list(pageLength = 5, dom = 'tip')) %>%
formatDate(1:ncol(d), m)
单元格调整
字体/背景调整
datatable(iris[c(1:2,55:56,120:121),],
caption = ('Table 3 : This is formats for cells.'),
options = list(pageLength = 5),#展示的行数
#rownames=FALSE,
#colnames = c(LETTERS[1:5])) %>%
colnames = c('ID'=1,'A'=2,'B'=3,
'C'=4,'D'=5,'E'=6)) %>%
formatStyle('A', # column.name == 'xxx'
color = styleInterval(c(5.1, 6), # <=5.1,w;<=6,b;else,r
c('white', 'blue', 'red')), # 字体颜色
backgroundColor = 'skyblue', #背景颜色
fontWeight = styleInterval(5, c('normal', 'bold'))) %>% # 字体粗细
formatStyle(
'B', # column.name == 'xxx'
color = styleInterval(3.4, c('blue','red')),
backgroundColor = styleInterval(c(2.8,3.4),
c('lightgray', 'lightyellow','lightpink'))
) %>%
formatStyle(
'C', # column.name == 'xxx'
background = styleColorBar(iris$Petal.Length,
'steelblue'),
backgroundSize = '100% 70%',#(width,height)
backgroundRepeat = 'no-repeat',
backgroundPosition = 'center'
) %>%
formatStyle(
4, # column 4
color = styleEqual(1.5, c('red')) # value==1.5,fontColor=='red'
) %>%
formatStyle(
'D',
transform = 'rotateX(30deg) rotateY(5deg) rotateZ(10deg)',
backgroundColor = styleEqual(
unique(iris$Species),
c('lightblue', 'lightgreen', 'lightpink')
)) %>%
formatStyle(
5,
backgroundColor = styleEqual(
unique(iris$Species),
c('lightblue', 'lightgreen', 'lightpink')
))
References:
- DT Helper Functions
- 在shiny中使用DT包的常用设置
- 在R中自定义表格数据—DT包
- Unicode®字符百科