通过函数调用闪亮的分组输入

Mar*_*ase 2 group-by r input shiny

我正在尝试制作一个闪亮的应用程序。原则应该很简单:为每个输入显示一个表格。这是我的代码。该应用程序显示整个数据库的总和,但我不想要这样。

ui <- fluidPage(
  titlePanel("Casco Monthly"),
  sidebarLayout(
    sidebarPanel(
      h2(strong("Shiny App"),style = "color:blue"),
      img(src = "groupama.jpg", height = 100, width = 200),
      selectInput("select", h3("Categorii"), 
                  choices = list("CLIENT_TYPE" = "CLIENT_TYPE", "Grupare.Leasing" = "Grupare.Leasing",
                                 "AGENT_TYPE" = "AGENT_TYPE", "Grupare.vehicul" = "Grupare.vehicul",
                                  "Grupare.vechime"="Grupare.vechime"),
                  selected = "CLIENT_TYPE"),
      selectInput("select2",label = "Client Type",
                  choices = c ("NONE","Categorie_client"),
                  selected = "NONE")),

    mainPanel(
      h1(strong("CASCO 3003")),
    mainPanel(tableOutput("table1")))
  )
)


server <- function(input, output) {


  aggregated <- reactive({
    DATA %>%
      group_by("3003"=input$select) %>%
      summarise("Earned Premium" = sum(EP), "Exposure" = sum(EXP),"GWP" = sum(GWP_RON), "Incurred" = sum(INC),"NO of events" = sum(Nr.evenim))
  })

  output$table1 <- renderTable({
    aggregated()

})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

例如:

CLIENT_TYPE EP  EXP GWP INC NR.EVENIM
PF      10  1   1000    30  2
PF      20  4   2000    50  1
PF      50  5   1500    60  2
PJ      20  3   2500    20  1
PJ      40  7   2000    10  1
PJ      30  8   500     20  2
PJ      20  9   1500    20  1
Run Code Online (Sandbox Code Playgroud)

我想获得这样的东西:

CLIENT_TYPE Earnend Premium Exposure    GWP    Incurred  No of events
PF                 80          10       4500      140           5
PJ                110          27       6500       70           5
Run Code Online (Sandbox Code Playgroud)

但是,事实上该应用程序显示了总计:

3003          Earnend Premium   Exposure    GWP     Incurred     No of events
CLIENT_TYPE        190             37      11000      210            10
Run Code Online (Sandbox Code Playgroud)

我希望 smbd 明白我想说的。

谢谢。

dem*_*ain 5

当你使用时input$select,它是一个字符串( input$select = "CLIENT_TYPE")。

所以你需要使用 function group_by_()(或group_by_at()) 而不是 function group_by()。该函数将理解字符串应被视为 data.frame 的变量。

更多信息请参见:dplyr:group_by 和 group_by_ 函数之间有什么区别?

aggregated <- reactive({
  DATA %>%
    group_by_(input$select) %>%
    summarise(  [...] )
})
Run Code Online (Sandbox Code Playgroud)

或者

aggregated <- reactive({
  DATA %>%
    group_by_at(input$select) %>%
    summarise(  [...] )
})
Run Code Online (Sandbox Code Playgroud)

  • @demarsylvain 请更新您的答案:group_by(across(input$select)) %&gt;% (2认同)