gpt4 book ai didi

r - 在多个条件下过滤 Shiny 的数据表

转载 作者:行者123 更新时间:2023-12-01 11:37:45 24 4
gpt4 key购买 nike

以下是rstudio shiny website上提供的datatable demo的直接复制。过滤数据集很容易(例如钻石上的理想,或虹膜上的 setosa),但是有没有办法过滤钻石数据集中的多个条件,例如“理想”和“公平”?我已经尝试了基本的“AND”和“&”语法、空格,但似乎没有任何效果。这似乎应该是可能的,但这甚至可能还是需要一些迂回的方法?

require(shiny)
runApp(
list(ui = fluidPage(
title = 'Examples of DataTables',
sidebarLayout(
sidebarPanel(
conditionalPanel(
'input.dataset === "diamonds"',
checkboxGroupInput('show_vars', 'Columns in diamonds to show:',
names(diamonds), selected = names(diamonds))
)
),
mainPanel(
tabsetPanel(
id = 'dataset',
tabPanel('diamonds', dataTableOutput('mytable1'))
)
)
)
),
server = shinyServer(function(input, output) {

# a large table, reative to input$show_vars
output$mytable1 <- renderDataTable({
library(ggplot2)
diamonds[, input$show_vars, drop = FALSE]
})

})
)
)

经过进一步搜索,我怀疑我应该能够使用 jquery column filter plugin 。为了简化这个问题,这里是上述代码的精简版:
library(shiny)
runApp(
list(ui = basicPage(
h1('Diamonds DataTable with TableTools'),

# added column filter plugin
singleton(tags$head(tags$script(src='https://code.google.com/p/jquery-datatables-column-filter/source/browse/trunk/media/js/jquery.dataTables.columnFilter.js',
type='text/javascript'))),
dataTableOutput("mytable")
)
,server = function(input, output) {
output$mytable = renderDataTable({
diamonds[,1:6]
}, options = list(
pageLength = 10,
columnDefs = I('[{"targets": [0,1],
"searchable": true}]')
)
)
}
))

但是,我似乎无法让 columnFilter 插件正常工作。 columnDefs 语句(注释掉)工作正常,但是当我尝试执行 columnFilter 语句时,我只得到表头和过滤器搜索框。我怀疑必须关闭某些语法才能使其正常工作。作为功​​能的示例,请参阅 this website 。请注意,这也是使用 rstudio github 中最新版本的 Shiny

最佳答案

关闭正则表达式转义

默认情况下,DataTables 会转义搜索词中的正则表达式字符。但是,从 DataTables 1.10 开始,就有了 disable the escaping 和允许正则表达式搜索的选项。我们可以使用 options 将选项传递给 datatable ,如下所示:

library(DT)
datatable(mtcars,
options = list(search = list(regex = TRUE)))

现在您的搜索可以使用正则表达式。例如,要过滤 Mazda 或 Chrysler 的表,您可以搜索 Mazda|Chrysler

这是关于此事的官方 RStudio page

示例应用

enter image description here
library(shiny)
library(DT)

ui <- fluidPage(
fluidRow(
column(width = 9,
br(),
DT::dataTableOutput("dt")
),
column(width = 3,
br(),
radioButtons("regex", "Enable Regex?", choices = c("yes", "no"), inline = T))
)
)

server <- function(input, output, session) {
output$dt <- DT::renderDataTable({
value <- ifelse(input$regex == "yes", TRUE, FALSE)
datatable(mtcars,
options = list(search = list(regex = value))
)
})
}

shinyApp(ui, server)

关于r - 在多个条件下过滤 Shiny 的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com