Сгруппировать по входам (переменным) и входам (значениям) в R блестящий - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь сделать приложение с R блестящим, и у меня есть небольшая проблема.

Я хочу иметь 2 входа.Первый вход содержит много переменных из базы данных, а второй вход содержит значения определенной переменной.

Пример:

ui = tagList(
    shinythemes::themeSelector(),
    navbarPage(
      theme = "united",  # <--- To use a theme, uncomment this
      "shinythemes",
      tabPanel("Casco 3003",
               sidebarPanel(
                 tags$h5("Deafult actionButton:"),
                 actionButton("action", "Search"),
                 radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
                              inline = TRUE),
                 downloadButton('downloadReport'),

                 selectInput("select", h3("Categorii"), 
                             choices = list("By Client Category" = "CLIENT_TYPE", "By Client Type" = "Leasing",
                                            "By Agent Type" = "by_agent_type", "By Vehicle Category" = "Vehicle_Category",
                                            "By Brands Top 10 Cars"="top_10_cars","By Age Of Vehicle Car"="Car_age"),
                             selected = "CLIENT_TYPE"),
                 selectizeInput("select2",label = "Vehicle Category",
                             choices = Casco_l$Vehicle_Category),
                 selectInput("select21",label = "Client Type",
                             choices = list("All"= "All","Client Category" = "CLIENT_CATEGORY"),
                             selected = "All"),
                 tags$h5("actionButton with CSS class:"),
                 actionButton("action2", "Action button", class = "btn-primary")
               ),
               mainPanel(
                 tabsetPanel(
                   tabPanel("INSIS 3003",
                            h4("Table"),
                            tableOutput("table1")
                   ),
                   tabPanel("Graphics",
                            plotOutput("plot1"),
                            plotOutput("plot3"))
                 )
               )
      )))
server = function(input, output) {

    aggregated <- reactive({
    Casco_l = subset(Data,INSR_TYPE==3003)
    Casco_l %>%
      group_by_(input$select21,input$select) %>%
      filter_(input$select2) %>%
      summarise("Exposure" = format(round(sum(Expos)), digits = 0, big.mark=","),
                "Earned Premium" = format(round(sum(Earned_Premium)), digits = 0, big.mark=","),
                "GWP" = format(round(sum(GWP_RON)), digits = 0, big.mark=","),
                "Incurred" = format(round(sum(inc)), digits = 0, big.mark=","),
                "NO of events" = format(as.numeric(sum(No_ev)), digits = 0, big.mark=","),
                "Frequency %" = format((sum(No_ev)/sum(Expos)*100), digits = 2, nsmall =2, big.mark=","),
                "Loss Ratio %" = format(as.numeric((sum(inc)/sum(Earned_Premium))*100), digits = 2, nsmall=2, big.mark=","),
                "ULR %"= format(as.numeric((sum(inc)/sum(Earned_Premium))*ulr*100),digits = 2, nsmall=2, big.mark=","),
                "Avr premium" = format(round(ifelse((sum(Expos)==0),0,(sum(Earnend_Premium)/sum(Expos)))), digits = 0, big.mark=","),
                "Avr claim" = format(round(ifelse((sum(No_ev)==0),0,(sum(inc)/sum(No_ev)))), digits = 0, big.mark=",") 
      )


  })

Я не знаю, как использовать вход $ select2 для созданиягруппа.Потому что приложение говорит, что «Cars» не существует («Cars - это значение из переменной Vehicle Category»).

Я хочу сказать, что я хочу группу по переменной (input $ select)и по значениям (введите $ 2).

Спасибо.

Я добавил изображение, чтобы показать, что я пытаюсь сказать. "По агентуТип "- это переменная (столбец) из набора данных, точно такая же как" Категория клиента ". Для первого ввода (" По типу агента ") я хочу отобразить все значения, для второго ввода (" Категория клиента ") я хочуможно выбрать между «PF» и «PJ» и отображать только один (или «PF» или «PJ»), но не одновременно.

РЕДАКТИРОВАТЬ:

table(AGENT_TYPE): Broker,Agents, Own Network
table(CLIENT_CATEGORY): PF, PJ

Я хочучтобы отобразить все значения для AGENT_TYPE и только одно значение для CLIENT_CATEGORY, а в group_by я делаю сумму по столбцу.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны использовать updateSelectInput.Я не смог воспроизвести ваш код, поэтому я создал собственный мини-пример.Вы в основном хотите, чтобы ввод 2 отображал только переменные, обусловленные вводом 1, верно?Если так, надеюсь, это поможет.Вы можете легко добавить больше переменных и даже упростить пример с помощью индексов (чтобы избежать команды eval parse).

library(shiny)
#library(shinyjs)

df <- data.frame(A=21:50,B=1:5,C=c(T,F))


ui <- fluidPage(
  #useShinyjs(),
  # App title ----
  h1("TEST"),
  br(),
  selectInput("one","select column",choices = colnames(df),"A"),
  br(),
  selectInput("two","select variable of selected column",choices = df$A),
  br(),
  tableOutput("test")

)

server <- function(input, output, session){
  #hide("test")

  observeEvent(input$one,{
    k <- which(colnames(df)==input$one)
    choice <- unique(df[,k])
    updateSelectInput(session,inputId = "two",choices = choice)
    #show("three",anim=T)
  })

  output$test <- renderTable({
    df[df[,which(colnames(df)==input$one)]==input$two,]
  })

}

shinyApp(ui, server)

Надеюсь, это поможет.

EDIT: Попытка принять во внимание редактирование изображения.Я не уверен, что понимаю, чего именно ты хочешь.

...