R 闪亮应用程序中的多组用户

R 闪亮应用程序中的多组用户,r,shiny,dplyr,R,Shiny,Dplyr,我有一个闪亮的应用程序,它接受一个数据帧,并从dplyr应用groupby。我可以让它接受单个分组,但我希望selectInput接受多个分组变量 我可以通过添加另一个selectInput,然后将其传递给groupby语句来解决这个问题,但我希望这可以扩展到任意数量的变量。因此,我需要一个selectInput来接受多个参数 仅仅添加multiple=TRUE并不能以groupby能够理解的方式传递变量,现在groupby被弃用,我无法适应 注意 此应用程序的完整版本使用fileInput,而

我有一个闪亮的应用程序,它接受一个数据帧,并从
dplyr
应用
groupby
。我可以让它接受单个分组,但我希望
selectInput
接受多个分组变量

我可以通过添加另一个
selectInput
,然后将其传递给
groupby
语句来解决这个问题,但我希望这可以扩展到任意数量的变量。因此,我需要一个
selectInput
来接受多个参数

仅仅添加
multiple=TRUE
并不能以
groupby
能够理解的方式传递变量,现在
groupby
被弃用,我无法适应

注意

此应用程序的完整版本使用
fileInput
,而不是硬编码的数据集,因此调用
renderUI
,以及
reactive

library(shiny)
library(DT)
library(dplyr)

ui <- fluidPage(

  titlePanel("app"),

  sidebarLayout(
    sidebarPanel(

      uiOutput("groups")

    ),


    mainPanel(

      DT::dataTableOutput("summary")
    )
  )
)


server <- function(input, output) {
  mydata <- reactive({structure(list(School = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
                                                          2L, 1L, 1L, 2L, 2L), .Label = c("School1", "School2"), class = "factor"), 
                                     Town = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
                                                        2L, 1L), .Label = c("Levin", "Wellington"), class = "factor"), 
                                     Income = c(6314L, 3546L, 3541L, 846684L, 231123L, 564564L, 
                                                545L, 1325L, 484L, 51353L, 465546L, 564546L)), .Names = c("School", 
                                                                                                          "Town", "Income"), class = "data.frame", row.names = c(NA, -12L
                                                                                                          ))})



  output$groups <- renderUI({
    df <- mydata()
    selectInput(inputId = "grouper", label = "Group variable", choices = names(df), multiple = TRUE)
  })




  summary_data <- reactive({
    req(input$grouper)
    mydata() %>%
      dplyr::group_by(!!rlang::sym(input$grouper)) %>%
      dplyr::summarise(mean_income = mean(Income), na.rm = TRUE)
  })

  output$summary <- DT::renderDataTable({
    DT::datatable(summary_data())
  })



}

shinyApp(ui, server)
库(闪亮)
图书馆(DT)
图书馆(dplyr)

ui正如Renu在评论中指出的那样,答案是替换
,以及带有
syms
sym
(这允许
groupby
接受变量列表,而不是单个变量

library(shiny)
library(DT)
library(dplyr)

ui <- fluidPage(

  titlePanel("app"),

  sidebarLayout(
    sidebarPanel(

      uiOutput("groups")

    ),


    mainPanel(

      DT::dataTableOutput("summary")
    )
  )
)


server <- function(input, output) {
  mydata <- reactive({structure(list(School = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
                                                          2L, 1L, 1L, 2L, 2L), .Label = c("School1", "School2"), class = "factor"), 
                                     Town = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
                                                        2L, 1L), .Label = c("Levin", "Wellington"), class = "factor"), 
                                     Income = c(6314L, 3546L, 3541L, 846684L, 231123L, 564564L, 
                                                545L, 1325L, 484L, 51353L, 465546L, 564546L)), .Names = c("School", 
                                                                                                          "Town", "Income"), class = "data.frame", row.names = c(NA, -12L
                                                                                                          ))})



  output$groups <- renderUI({
    df <- mydata()
    selectInput(inputId = "grouper", label = "Group variable", choices = names(df), multiple = TRUE)
  })




  summary_data <- reactive({
    req(input$grouper)
    mydata() %>%
      dplyr::group_by(!!!rlang::syms(input$grouper)) %>%
      dplyr::summarise(mean_income = mean(Income), na.rm = TRUE)
  })

  output$summary <- DT::renderDataTable({
    DT::datatable(summary_data())
  })



}

shinyApp(ui, server)
库(闪亮)
图书馆(DT)
图书馆(dplyr)

ui我对shiny不太了解,但我知道您可以像这样将多个变量传递给
groupby
library(rlang);df%>%groupby(!!!syms(c('a','b','c'))
您也可以在(c('a','b','c')处执行
df%>%groupby\u)
@Renu
!!!
syms
的第一个选项工作得很好!你能给我指出这两个函数的任何文档吗?我很难找到关于它们的很多信息,我觉得这可能是一个常见的问题,我知道最好的答案是或。不幸的是,这两个选项都没有提到
syms
,但它们都是了解如何使用
dplyr
函数编程的良好资源。