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 明白我想说的。
谢谢。
当你使用时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)