R语言DT包在报告中的应用

在使用 Rmarkdown 或 Shiny 写报告时总会遇到 table 展示的困扰
有幸了解到益辉大神的DT包,如厕后的畅快感又一次降临了

有任何建议或疑问,请加 QQ: 1595218767 ,共同探讨学习
如R/python代码编程作图等方面需要帮忙,欢迎来店咨询 之恒科技, 挥动热情的小爪爪期待你哦

函数参数简介

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)) # 小数点位数
cols.png

时间格式调整

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)
date1.png

单元格调整

字体/背景调整

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')
    ))
cells.png

References:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342