在 Shiny 中对数据进行反应性排序后计算列的平均值(均值)

Calculate average (mean) of the column after reactively sort the data in Shiny

我正在尝试根据反应变量计算列的平均值。

我在原始数据上有 2 列 sheet“DN(分类)”和“强度(数值)”。我想计算通过“DN”过滤后的“强度”的平均值。打击是我的剧本。

DN  Intensity
EX2 72.35579
EX2 66.59401
EX2 64.26114
EX2 81.52641
EX2 68.62764
EX2 74.28244
EX3 123.60344
EX3 123.0854
EX3 119.91794
EX3 122.62172
EX3 111.73214
EX3 126.37246

df1 <-data.frame("DN"=DN, "Intensity"=Intensity)

ui <- fluidPage(
  
  titlePanel("Volume Calculator"),
  
  sidebarLayout(
    sidebarPanel(
      selectizeInput("Y", "Y",choices=Y, selected = TRUE, multiple = TRUE),
      dateInput("X", "X:",format = "mm/dd/yy")),
    mainPanel(column(5,
                     sliderInput("Time",
                                 "Time:",
                                 min = 1,
                                 max = 60,
                                 value = 30),
                     selectInput("DN", "DN", choices = D1N),
                     
                     column(5,
                            fluidRow(
                              h3("Total"),
                              verbatimTextOutput("Ex1"))
                     ))
              
    )))

server <- function(input, output) {
  d<- reactive({
    res <- d1 %>%%>%
      filter(DN == input$DN) %>%
      res})
  
  output$Ex1 <- renderPrint({
    dataset <-d()
    Int <-tapply(dataset[[input$Intensity]],dataset[[input$DN]], mean, na.rm=TRUE)
    D1m <- abs(input$Time)
    results1 <- round(Int*Time, digits=0)
    results1  
  })
  
}

shinyApp(ui = ui, server = server)

题目没有全部信息。有些值未知,有些操作不清楚。例如,没有关于 Yinput$Intensity 的信息共享。此外,我认为您在这里不需要 tapply,因为您只过滤一个 DN 值。

假设您拥有的数据称为 df1 您可以尝试 -

library(shiny)

ui <- fluidPage(
  
  titlePanel("Volume Calculator"),
  
  sidebarLayout(
    sidebarPanel(
      selectizeInput("Y", "Y",choices=letters, selected = TRUE, multiple = TRUE),
      dateInput("X", "X:",format = "mm/dd/yy")),
    mainPanel(column(5,
                     sliderInput("Time",
                                 "Time:",
                                 min = 1,
                                 max = 60,
                                 value = 30),
                     selectInput("DN", "DN", choices = unique(df1$DN)),
                     
                     column(5,
                            fluidRow(
                              h3("Total"),
                              verbatimTextOutput("Ex1"))
                     ))
              
    )))

server <- function(input, output) {
  d<- reactive({
    df1 %>%filter(DN == input$DN) 
  })
  
  output$Ex1 <- renderPrint({
    dataset <-d()
    Int <-mean(dataset$Intensity[dataset$DN == input$DN], na.rm=TRUE)
    Int  
  })
  
}

shinyApp(ui = ui, server = server)