很多时候,我们需要在分析报告中给出相应的表格数据。如果只是单纯的给出数据对象的话报告不够美观。出于这样的一个考虑,本文给大家简单的介绍下DT
包。DT
包提供了JavaScript库DataTables的一个R接口,它使得R对象(矩阵或数据框)可以在HTML页面上显示为表格。该包DataTables
函数生成的表格提供了数据的筛选,分页,排序及其它功能,目前已发布在CRAN上。包的作者是谢大大。安装方法:
install.packages('DT')
该包的一个主要函数是datatable()
。这个函数通过创建一个HTML的小控件来显示R数据对象:
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 = '100%', fillContainer = getOption('DT.fillContainer',FALSE), autoHideNavigation = getOption('DT.autoHideNavigation', FALSE),selection = c('multiple', 'single', 'none'), extensions = list(), plugins = NULL)
我们以R自带的iris
数据集为例:
library(DT)datatable(iris)
如果你对DataTables熟悉,可以使用options
参数来自定义表格,详见这里。下面我们简要介绍其它几个重要的参数。
class
参数用于指定表格的CSS类型,所有可选项可以在这里找到。该参数默认值display
可以实现在鼠标悬停处突出对应的行,你也可以选择将CSS的类型结合起来使用。如cell-border
和stripe
:
datatable(head(iris), class='cell-border stripe')
如果数据对象存在行名,默认情况下会显示在表格的第一列。通过设置rownames=FALSE
可以取消显示行名。当然,我们也可以通过字符串向量来更改行名。
datatable(head(mtcars))
datatable(head(mtcars), rownames=FALSE) #不显示行名
默认情况下,datatable()
会在表中显示数据的列名。我们也可以自定义列名。
完全替换列名:
datatable(head(iris), colnames = c('Here', 'Are', 'Some', 'New', 'Names'))
datatable(head(iris), colnames=c('A Better Name'='Sepal.Width'))
datatable(iris, colnames=c('Another Better Name'=2, 'Yet Another Name'=4))
datatable(head(iris), colnames=c('ID'=1)) #第一列列名设置为'ID'
container
参数通过指定数据表容器来控制表格单元,默认情况下是列名。下面是一个自定义表格标题的例子:
# 自定义表格容器sketch = htmltools::withTags(table(class = 'display',thead(tr(th(rowspan = 2, 'Species'),th(colspan = 2, 'Sepal'),th(colspan = 2, 'Petal')),tr(lapply(rep(c('Length', 'Width'), 2), th)))))print(sketch)Species Sepal Petal Length Width Length Width
# 这里我们设置rownames=FALSE不显示行名,datatable(iris[1:20, c(5, 1:4)], container = sketch, rownames = FALSE)
caption
参数用于添加表格标题。它可以是一个字符串向量,也可以是一个由htmltools::tags$caption()
创建的标签对象。更多详情参考这里
datatable(head(iris),caption = 'Table 1: This is a simple caption for the table.')
# 自定义在底部显示标题datatable(head(iris),caption = htmltools::tags$caption(style = 'caption-side: bottom; text-align: center;','Table 2: ', htmltools::em('This is a simple caption for the table.')))
DataTables默认情况下不能对列进行过滤,不过右上角提供了一个全局过滤。我们在datatable()
函数中添加了一个filter
参数用于实现列过滤,默认值为filter='none'
。我们可以设置filter=top
或者filter=bottom
在顶部或者底部对列进行过滤。
iris2 = iris[c(1:10, 51:60, 101:110), ]datatable(iris2, filter = 'top', options = list(pageLength = 5, autoWidth = TRUE))
联系客服