Расчет совокупных значений по выбранным строкам в DT
Я хочу иметь возможность выбрать несколько строк в DT и иметь совокупный процент от значения столбца, представленного в flexdashboard
калибровать. Мне нужно позвонить из выбранных строк, так как я планирую использовать это с crosstalk
где строки будут выбраны на точечных графиках или картах.
Этот пример с игрушкой позволяет мне создать DT, где я могу щелкнуть строки 2-10 и распечатать selectedRow()
покажет мне совокупную сумму столбца Petal.width, а индикатор отобразит сумму именно так, как я хочу.
library(shiny)
library(DT)
library(flexdashboard)
shinyApp(
ui = fluidPage(
textOutput('list'),
DTOutput('table'),
flexdashboard::gaugeOutput("plt1")
),
server = function(input, output, session) {
iris2<-iris %>% mutate(perc=round((Petal.Width/sum(Petal.Width))*100,1))
selectedRow <- eventReactive(input$table_rows_selected,{
selrow<-cumsum(iris2$perc)[c(input$table_rows_selected)]
tail(selrow, n=1)
})
output$plt1 <- flexdashboard::renderGauge({
gauge(selectedRow(), min = 0, max = 100, symbol = '%', gaugeSectors(
success = c(80, 100), warning = c(40, 79), danger = c(0, 39)))
})
output$list<-renderText({
selectedRow()
})
output$table <- renderDT({iris2})
}
)
ui <- fluidPage(
mainPanel(
verbatimTextOutput('list'),
dataTableOutput('table')
)
)
Однако, если я выбираю строки 2-10, а затем выбираю первую строку, датчик сбрасывается до значения, присутствующего только в первой строке. Я просмотрел документацию DT и не смог найти очевидного способа изменить это, поэтому я попытался выбрать только хвост cumsum
значение в selectedRow()
но это не сработало.
Есть ли способ получить реактивно выбранную совокупную сумму Petal.width, независимо от порядка, в котором выбираются строки DT?
1 ответ
С помощью sum()
вместо cumsum()
Кажется, работает на меня.
library(shiny)
library(DT)
library(tidyverse)
library(flexdashboard)
shinyApp(
ui = fluidPage(
textOutput('list'),
DTOutput('table'),
flexdashboard::gaugeOutput("plt1")
),
server = function(input, output, session) {
iris2<-iris %>% mutate(perc=round((Petal.Width/sum(Petal.Width))*100,1))
selectedRow <- eventReactive(input$table_rows_selected,{
selrow<-sum(iris2$perc[c(input$table_rows_selected)])
})
output$plt1 <- flexdashboard::renderGauge({
gauge(selectedRow(), min = 0, max = 100, symbol = '%', gaugeSectors(
success = c(80, 100), warning = c(40, 79), danger = c(0, 39)))
})
output$list<-renderText({
selectedRow()
})
output$table <- renderDT({iris2})
})