首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在DT中计算选定行的累积值

在DT中计算选定行的累积值
EN

Stack Overflow用户
提问于 2018-06-09 18:30:44
回答 1查看 406关注 0票数 0

我希望能够从一个DT中选择几行,并在flexdashboard量表中表示列值的累积百分比。我需要从选定的行调用,因为我计划将其与crosstalk一起使用,其中的行将从散点图或地图中选择。

这个玩具示例允许我生成一个DT,我可以在其中单击第2-10行,打印的selectedRow()将向我显示Petal.width列的累积和,并且仪表将准确地呈现我想要的总和。

代码语言:javascript
运行
复制
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 documentation,但找不到任何明显的方法来改变这一点,所以我尝试在selectedRow()中只选择cumsum值的尾部,但这并不起作用。

有没有办法获得反应选择的Petal.width累积和,而不管DT行被选择的顺序如何?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-11 08:33:11

使用sum()而不是cumsum()似乎对我很有效。

代码语言:javascript
运行
复制
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})

})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50773311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档