R、multiple selectInput和计算在选择新输入时更新

R、multiple selectInput和计算在选择新输入时更新,r,shiny,R,Shiny,我闪亮的仪表板正在按我的愿望工作。但是,当在仪表板中过滤多个真正的多个select输入时,更新(或求和)总geom_文本值 selectInput("Select2","Star",choices=NULL,multiple = T) 使用多个selectInput。我想在引入新输入时“求和”总值 这是我的代码,我正在使用一个可复制的例子 library(shiny) library(datavolley) library(tidyverse)

我闪亮的仪表板正在按我的愿望工作。但是,当在仪表板中过滤多个真正的多个select输入时,更新(或求和)总geom_文本值

selectInput("Select2","Star",choices=NULL,multiple = T)
使用多个selectInput。我想在引入新输入时“求和”总值

这是我的代码,我正在使用一个可复制的例子

library(shiny)
library(datavolley)
library(tidyverse)

  
  
ezt<-sample(1:9, 50000, replace = T)
est<-sample(c("A", "B", "C", "D"), 50000, replace = T)
np<-sample(c(1:5), 50000, replace = T)
grade<-sample(c('#', '=', '/', '-', '+'), 50000, replace=T)
block<-sample(c('line', 'angle', 'peel'), 50000, replace = T)
name<-sample(c('CB', 'TW'), 50000, replace = T)
teamname<-sample(c('Gig/Gog'), 50000, replace=T)
opponent<-sample(c('UKR', 'LAT', 'NOR', 'FIN', 'FRA'), 50000, replace = T)
star<-sample(c('4*', '3*', '2*', '1*', '5*'), 50000, replace = T)
sst <- data.frame(ezt, est, np, grade, block, name, teamname, opponent, star)
sst$est <- as.character(sst$est)
sst$teamname <- as.character(sst$teamname)
sst$name <- as.character(sst$name)
sst$opponent <- as.character(sst$opponent)
sst$star <- as.character(sst$star)
sst$np <- as.integer(sst$np)
sst$grade <- as.character(sst$grade)
sst$block <- as.character(sst$block)


sst <- sst %>% 
  dplyr::group_by(teamname, name, ezt, est, np, block, opponent, star) %>%
  dplyr::summarise(att = n(),
                   kill = sum(grade == '#'))

filteredxy <- datavolley::dv_xy(sst$ezt, end = 'lower', subzone = sst$est)
sst<-cbind.data.frame(sst, filteredxy)


ui <- fluidPage(
  titlePanel("Dashboard"),
  sidebarLayout(
    sidebarPanel(
      selectInput("Select1","Team",unique(sst$teamname)),
      selectInput("Select2","Star",choices=NULL,multiple = T),
      selectInput("Select3","Player",choices = NULL),
      selectInput("Select4","Opponent",choices=NULL,multiple = T),
      selectInput("Select5","Block",choices=NULL),
      selectInput("Select6","NP",choices=NULL)),
    mainPanel(plotOutput("coolplot"))))



server <- function(input, output, session) {
  observeEvent(input$Select1,{
    updateSelectInput(session,'Select2',
                      choices=unique(sst$star[sst$teamname==input$Select1]))
  }) 
  observeEvent(input$Select2,{
    updateSelectInput(session,'Select3',
                      choices=unique(sst$name[sst$teamname==input$Select1 & sst$star %in% input$Select2]))
  }) 
  observeEvent(input$Select3,{
    updateSelectInput(session,'Select4',
                      choices=unique(sst$opponent[sst$teamname==input$Select1 & sst$star %in% input$Select2 & 
                                                   sst$name == input$Select3]))
  })
  observeEvent(input$Select4,{
    updateSelectInput(session,'Select5',
                      choices=unique(sst$block[sst$teamname==input$Select1 & sst$star %in% input$Select2 & 
                                                sst$name == input$Select3 & sst$opponent %in% input$Select4]))
  })
  observeEvent(input$Select5,{
    updateSelectInput(session,'Select6',
                      choices=unique(sst$np[sst$teamname==input$Select1 & sst$star %in% input$Select2 & 
                                                 sst$name == input$Select3 & sst$opponent %in% input$Select4 & sst$block == input$Select5]))
  })
  output$coolplot <- renderPlot({
    filtered <-
      sst %>%
      filter(opponent %in% input$Select4, star %in% input$Select2) %>%
      filter(block == input$Select5, teamname == input$Select1, name == input$Select3, np == input$Select6) %>%
      group_by(name, teamname, np, block, x, y, opponent, star) %>%
      dplyr::summarise(att = sum(att),
                       kill = sum(kill))
    
    ggplot(filtered, aes(x, y, fill = (kill/att))) + 
      geom_tile() + 
      ggcourt("lower", labels = NULL, show_minor_zones = T) +
      geom_text(aes(label = att), position = position_dodge(0),vjust = -1) 
  })}

shinyApp(ui = ui, server = server)

库(闪亮)
图书馆(数据截取)
图书馆(tidyverse)

eztIf如果文本重叠,则给定的
x
y
可能有多个
att
值?一个想法是,当你按对手分组时,你基本上是在总结每个对手和明星的攻击和杀戮。然后,当您按多个对手/明星进行筛选时,您将得到筛选数据以及每个对手和明星的多个攻击总和。试着通过
对手
明星
从你的
小组中带走?我可能对此不感兴趣,但从您的预期结果来看,我怀疑这与您的
group\u by
和为唯一(x,y)提供多个
att
值的过滤器有关。就是这样,谢谢!