#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, ", ")))