Styling DataTables
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Most of the shiny apps have tables as the primary component. Now lets say you want to prettify your app and style the tables. All you need understand how tables are built using HTML. This is how the default datatable looks like in the app.
In order to build the html table I have used a function table_frame
which can be used as a container in DT::renderdatatable
.
This function basically uses htmltools
. For more references on the basics of html tables please refer here
table_frame <- function() { htmltools::withTags(table(class = 'display', thead( tr( th(rowspan = 2, 'Latitude'), th(rowspan = 2, 'Longitude'), th(rowspan = 2, 'Month'), th(rowspan = 2, 'Year'), th(class = 'dt-center', colspan = 3, 'Cloud'), th(rowspan = 2, 'Ozone'), th(rowspan = 2, 'Pressure'), th(rowspan = 2, 'Surface Temperature'), th(rowspan = 2, 'Temperature'), tr(lapply(rep( c('High', 'Low', 'Mid'), 1 ), th)) ) ))) }
Tables might have n number of records and its not feasible to display them at once on dashboards. But someone might need to see them all at once. So in tableoptions
where we can add two buttons show more
and show less
. Show less will use the default option of 10 records and show more will display all the records.
table_options <- function() { list( dom = 'Bfrtip', #Bfrtip pageLength = 10, buttons = list( c('copy', 'csv', 'excel', 'pdf', 'print'), list( extend = "collection", text = 'Show All', action = DT::JS( "function ( e, dt, node, config ) { dt.page.len(-1); dt.ajax.reload();}" ) ), list( extend = "collection", text = 'Show Less', action = DT::JS( "function ( e, dt, node, config ) { dt.page.len(10); dt.ajax.reload();}" ) ) ), deferRender = TRUE, lengthMenu = list(c(10, 20,-1), c('10', '20', 'All')), searching = FALSE, editable = TRUE, scroller = TRUE, lengthChange = FALSE , initComplete = JS( "function(settings, json) {", "$(this.api().table().header()).css({'background-color': '#517fb9', 'color': '#fff'});", "}" ) ) }
Below is the output how the datatable looks like once the html container and table options are used.So by stying not only can we change the column names but also group them. If you see the default table how we have three columns with prefix cloud. These can be grouped under one column name Cloud.
Code
You can find code for the app here.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.