Bah*_*mid 12 r datatables shiny
我希望能够在下面创建的数据框的底部添加一个Total/Subtotal,显示为DataTable.我希望在应用的每个DataTable过滤器时更新Total/Subtotal.假设用户过滤前10条记录,我希望总数计算前10条记录的总和,或者如果用户过滤20条记录,我希望总数反映20条记录的总和,依此类推.
通过将新行绑定到现有数据帧以执行所需的计算,我想到了一种在R中实现此目的的方法.但我想知道是否有一种通过DataTables选项实现这一目标的简单方法.与使用" 页脚回调"功能的此示例类似的内容.
#Load required packages
require(shiny)
#Create a dataframe
df <- data.frame(random=1:25)
server <- function(input,output,session){
#Display df using DataTable and apply desired options
output$display <- renderDataTable({df})
}
ui <- shinyUI(fluidPage(
#Add a title
h1('Testing TableTools'),
mainPanel(
#Display results
dataTableOutput('display')
)
))
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
以下是如何对给定页面进行小计的示例。为了得到总数,你可以预先计算它,然后也许paste
它进入 JS 输出?
library(shiny)
library(DT)
ui <- shinyUI(fluidPage(
h1('Testing TableTools'),
mainPanel(
dataTableOutput('display')
)
))
Names <- c("",names(mtcars))
FooterNames <- c(rep("",4),Names[5:6],rep("",6))
server <- function(input, output, session) {
sketch <- htmltools::withTags(table(
tableHeader(Names),tableFooter(FooterNames)
))
opts <- list(
dom = 'Bfrtip', buttons = list('colvis','print',list(extend='collection',text='Download',buttons = list('copy','csv','excel','pdf'))),
footerCallback = JS(
"function( tfoot, data, start, end, display ) {",
"var api = this.api(), data;",
"$( api.column(5).footer()).html('SubTotal: '+",
"api.column(5).data().reduce( function ( a, b ) {",
"return a + b;",
"} )",
");",
"$( api.column(4).footer()).html('SubTotal: '+",
"api.column(4).data().reduce( function ( a, b ) {",
"return a + b;",
"} )",
");","}")
)
output$display <- DT::renderDataTable(container = sketch,extensions = 'Buttons',options = opts,{
mtcars
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5216 次 |
最近记录: |