Каскадные фильтры в блестящих таблицах данных - PullRequest
0 голосов
/ 16 января 2020

Я использую пакет DT для создания DataTables для моего приложения Shiny. Некоторые из моих столбцов - это факторы с сотнями уровней. Я ищу способ ограничить значения, отображаемые в фильтре выбора, только значениями, которые все еще присутствуют в данных, заданных другими выбранными в данный момент фильтрами.

Вот пример приложения:

library(DT)
library(shiny)

ui <- fluidPage(
    dataTableOutput("dt")
)
server <- function(input, output) {
    output$dt <- renderDataTable({
        datatable(CO2, filter = "top")
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

Как показано здесь, в наборе данных CO2 единственными значениями для Plant, которые присутствуют, когда Type равен "Mississippi", являются "Mn1", "Mn2", "Mn3", "Mc1", "Mc2", "Mc3" .

unique(CO2$Plant[CO2$Type == "Mississippi"])
#> [1] Mn1 Mn2 Mn3 Mc1 Mc2 Mc3
#> 12 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < Mn1 < ... < Mc1 

Однако в приложении Shiny при фильтрации таблицы данных по типу == "Миссисипи" и go для фильтрации столбца Plant все уровни факторов отображаются в качестве параметров. См. Этот снимок экрана для того, как это выглядит . Я не хочу, чтобы моим пользователям приходилось фильтровать уровни факторов, которых больше нет в отфильтрованном наборе данных (в моем реальном наборе данных есть сотни значений). Я нашел этот пример кода , который работает так, как мне хотелось бы, но я не уверен, как перенести его в Shiny.

...