Nice DT filters
[This article was first published on Saturn Elephant, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I am not a big fan of the built-in filters of DT. I prefer the ones below, made with the help of the JavaScript library select2.
First, download the files select2.min.js and select2.min.css. Now, here is the code:
library(DT) library(htmltools) dat <- iris sketch <- tags$table( tags$thead( tags$tr( tags$th(), lapply(names(dat), tags$th) ), tags$tr( lapply(c(0, 1:ncol(dat)), function(i) tags$th(id = paste0("th", i))) ) ) ) js <- c( "function(){", " this.api().columns().every(function(i){", " var column = this;", " var $select =", " $('<select multiple=\"multiple\">' +", " '<option value=\"\"></option>' +", " '</select>')", " .appendTo($('#th'+i).empty())", " .on('change', function(){", " var vals = $('option:selected', this).map(function(idx, element){", " return $.fn.dataTable.util.escapeRegex($(element).val());", " }).toArray().join('|');", " column.search(", " vals.length > 0 ? '^(' + vals + ')$' : '', true, false", " ).draw();", " });", " var data = column.data();", " if(i == 0){", " data.each(function(d, j){", " $select.append('<option value=\"' + d + '\">' + d + '</option>');", " });", " }else{", " data.unique().sort().each(function(d, j){", " $select.append('<option value=\"' + d + '\">' + d + '</option>');", " });", " }", " $select.select2({width: '100%', closeOnSelect: false});", " });", "}") htmlDep <- htmlDependency( name = "select2", version = "4.0.13", src = "path/to/select2", # path to the folder containing the 'select2' files script = "select2.min.js", stylesheet = "select2.min.css", all_files = FALSE ) dtable <- datatable( dat, container = sketch, options = list( orderCellsTop = TRUE, initComplete = JS(js), columnDefs = list( list(targets = "_all", className = "dt-center") ) ) ) dtable[["dependencies"]] <- c(dtable[["dependencies"]], list(htmlDep)) dtable
To leave a comment for the author, please follow the link and comment on their blog: Saturn Elephant.
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.