从 DT 中的选定行计算累积值
Calculating cumulative values from selected rows in DT
我希望能够从 DT 中 select 多行,并在 flexdashboard
仪表中表示列值的累积百分比。我需要从 selected 行调用,因为我打算将其与 crosstalk
一起使用,其中行将从散点图或地图 selected。
这个玩具示例允许我生成一个 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')
)
)
但是,如果我 select 第 2-10 行,然后 select 第一行,仪表将重置为仅第一行中存在的值。我查看了 DT documentation 并找不到任何明显的方法来改变它,所以我尝试 select 仅 selectedRow()
中 cumsum
值的尾部,但这没有'工作。
有没有办法得到 Petal.width 的反应性 selected 累积总和,而不管 DT 行 selected 的顺序如何?
使用 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})
})
我希望能够从 DT 中 select 多行,并在 flexdashboard
仪表中表示列值的累积百分比。我需要从 selected 行调用,因为我打算将其与 crosstalk
一起使用,其中行将从散点图或地图 selected。
这个玩具示例允许我生成一个 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')
)
)
但是,如果我 select 第 2-10 行,然后 select 第一行,仪表将重置为仅第一行中存在的值。我查看了 DT documentation 并找不到任何明显的方法来改变它,所以我尝试 select 仅 selectedRow()
中 cumsum
值的尾部,但这没有'工作。
有没有办法得到 Petal.width 的反应性 selected 累积总和,而不管 DT 行 selected 的顺序如何?
使用 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})
})