在数据表中切换即隐藏/取消隐藏行

问题描述

是否有实现此方法方法显示一个数据表,并且如果选择了行索引并单击了切换按钮,我想切换特定的行。我只想隐藏行,而不是完全从数据表中删除我有如下的用户界面。如何在服务器端实现?

library(shiny)
library(DT)

data <- data.frame(
    Name = c("Andy","Bob","Chad"),Job = c("Clerk","Pilot","Electrician")
)

ui <- fluidPage(
    
    Box(id = "myBox",title = NULL,selectInput(inputId = "row_index",label = "Row to Toggle",choices = c(1,2,3))
    ),actionButton(inputId = "button",label = "Show/Hide"),DT::dataTableOutput(('DTOut'))
)

server <- function(input,output) {
    
    output$DTOut <- DT::renderDataTable({
        data
    })
}
shinyApp(ui = ui,server = server)

解决方法

这是一种方法。它要求在第一个位置有一列行索引。如果您不想显示行索引,请添加此列并将其隐藏。

library(shiny)
library(DT)

initComplete <- JS(
  "function(settings,json) {","  var table = this.api();","  var nrows = table.rows().count();","  $('#button').on('click',function() {","    var nrows_filtered = table.rows({search:'applied'}).count();","    if(nrows_filtered === nrows) {","      var selection = $('select[id=row_index] option').val();","      var rowsToShow = [];","      for(var i = 1; i <= nrows; ++i) {","        if(i != selection) rowsToShow.push('^' + i + '$');","      }","      var regex = '(' + rowsToShow.join('|') + ')';","      table.column(0).search(regex,true).draw();","    } else {","      table.columns().search('').draw();","    }","  });","}"
)

data <- data.frame(
  Name = c("Andy","Bob","Chad"),Job = c("Clerk","Pilot","Electrician")
)

ui <- fluidPage(
  
  wellPanel(id = "myBox",selectInput(inputId = "row_index",label = "Row to Toggle",choices = c(1,2,3))
  ),actionButton(inputId = "button",label = "Show/Hide"),DTOutput("DTOut")
  
)

server <- function(input,output) {
  
  output$DTOut <- renderDT({
    datatable(data,options = list(initComplete = initComplete))
  })
  
}

shinyApp(ui = ui,server = server)