Я использую пакет 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.