Dynami c количество групп в selectInput R Shiny - PullRequest
0 голосов
/ 27 мая 2020

Мне нужна помощь в одном деле. У меня есть dataframe:

df <- data.frame(
  UserGroup = c("UserGroup1", "UserGroup2", "UserGroup2", "UserGroup3", "UserGroup3", "UserGroup3", NA, NA, NA, NA),
  User = c("User1", "User2", "User3", "User4", "User5", "User6", "User7", "User8", "User9", "User10")
)

Я хотел бы получить версию selectInput, как на картинке ниже.

enter image description here

Я нашел код:

    selectInput("state", "Choose a state:",
       list(
          `East Coast` = list("NY", "NJ", "CT"),
          `West Coast` = list("WA", "OR", "CA"),
          `Midwest` = list("MN", "WI", "IA") 
       )
    )

Это легко сделать вручную, но проблема в том, что df фрейм данных поступает из базы данных и может содержать произвольное количество групп и пользователей. Кто-нибудь знает, как написать код selectInput или как подготовить данные до того, как автоматически получить ожидаемый эффект?

1 Ответ

1 голос
/ 27 мая 2020

Как сказано здесь , вы можете использовать split(). Очевидно, это не работает, когда группа содержит одно наблюдение, поэтому я добавил User1 bis, чтобы показать вам. Кроме того, вам нужно создать категорию для тех, чья группа NA (я поставил здесь «Без группы», чтобы она была в алфавитном порядке в конце списка входов).

library(shiny)
library(dplyr)

df <- data.frame(
  UserGroup = c("UserGroup1", "UserGroup1", "UserGroup2", "UserGroup2", "UserGroup3", "UserGroup3", "UserGroup3", NA, NA, NA, NA),
  User = c("User1", "User1 bis", "User2", "User3", "User4", "User5", "User6", "User7", "User8", "User9", "User10")
)

df_2 <- df %>%
  mutate(UserGroup = ifelse(is.na(UserGroup), "Without Group", UserGroup)) 

ui <- fluidPage(
  selectInput("state", "Choose a state:",
              choices = split(df_2$User, df_2$UserGroup),
              selected = "User 1"
  )

)

server <- function(input, output, session) {}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...