Используйте столбец с несколькими переменными в качестве источника для checkboxgroupinput

#r #shiny

Вопрос:

Я пытаюсь создать какое-то блестящее приложение, в котором вы можете выбрать свои аллергены и посмотреть, какие продукты все еще полезны для вас.

Набор данных, который я использую, огромен, но чтобы дать вам представление:

 ID allergens 1 milk, soya, peanuts 2 almonds, soya, flour 3 milk, almonds, butter  

Теперь я хотел бы использовать все переменные из столбца «аллергены», но со всеми переменными по отдельности. Поэтому, когда вы открываете приложение shiny, флажок должен содержать либо: «молоко», либо «соя». На данный момент он показывает это как «молоко, соя, арахис» или «миндаль, соя, мука» или «молоко, миндальное масло».

Поэтому, в основном, когда у меня аллергия на молоко, я хотел бы, чтобы приложение показывало все продукты без молока (чтобы оно показывало только идентификатор 2 со всеми дополнительными деталями). На данный момент все переменные в столбце аллергены являются , должен ли я это изменить?

код, который я использую в данный момент:

 library(shiny) library(ggplot2) library(DT)  ui lt;- fluidPage(  titlePanel("Basic DataTable"),    # Create a new Row in the UI for selectInputs  fluidRow(  column(4,  checkboxGroupInput("allergies",  "select allergies:",  c("All",  unique(as.character(food$allergens))))  ),   # Create a new row for the table.  DT::dataTableOutput("table") ))  server lt;- function(input, output) {    # Filter data based on selections  output$table lt;- DT::renderDataTable(DT::datatable({  data lt;- food  if (input$allergies != "All") {  data lt;- data[data$allergies == input$allergies,]  }  data  }))   }  # Run the application  shinyApp(ui = ui, server = server)  

Ответ №1:

Вы можете хранить информацию с помощью запятых и манипулировать ею по мере необходимости.

Разделите строки с помощью:

strsplit(food$allergens, ", ")

Затем, чтобы получить вектор уникальных предметов, вам нужно будет удалить их из списка:

unique(unlist(strsplit(food$allergens, ", ")))