在 R Shiny 中创建向下钻取报告
Posted
技术标签:
【中文标题】在 R Shiny 中创建向下钻取报告【英文标题】:Creating drill down report in R Shiny 【发布时间】:2017-09-01 23:56:31 【问题描述】:我正在尝试显示一个包含“n”列的数据表,如下所示
Begin Date | EndDate | Month | Year | Count of Students
2/1/2014 | 1/31/2015 | Jan | 2014 | 10
3/1/2014 | 2/28/2015 | Feb | 2014 | 20
4/1/2014 | 3/31/2015 | Mar | 2014 | 30
5/1/2014 | 4/30/2015 | Apr | 2014 | 40
我想通过启用向下钻取/钻取功能使此数据表具有交互性,用户可以单击“学生人数”字段中的每个值来查看这些数字 10 背后的基础原始数据, 20,30 和 40。 例如,如果用户点击“10”,他/她应该能够看到该计数背后的学生原始数据。这类似于 excel 中的数据透视表概念,用户可以在其中看到数据透视表背后的基础数据。有没有办法我可以使用 R Shiny 做同样的事情?
【问题讨论】:
两件事:下钻应该如何存在于ui中;您是如何将数据放入表中的?您必须同时创建闪亮的 UI 体验处理向下钻取和处理数据的方式,将点击“10”连接到可以从该列中被“10”子集的数据框。 【参考方案1】:是的,使用DT
包来捕获选定的行并对主集进行子集化。下面是使用iris
集的示例:
library("dplyr")
library("shiny")
library("DT")
# create a summary table
summary_iris <- group_by(iris, Species) %>%
summarise(Count = n())
ui <- fluidPage(
dataTableOutput("summary")
, dataTableOutput("drilldown")
)
server <- function(input, output)
# display the data that is available to be drilled down
output$summary <- DT::renderDataTable(summary_iris)
# subset the records to the row that was clicked
drilldata <- reactive(
shiny::validate(
need(length(input$summary_rows_selected) > 0, "Select rows to drill down!")
)
# subset the summary table and extract the column to subset on
# if you have more than one column, consider a merge instead
# NOTE: the selected row indices will be character type so they
# must be converted to numeric or integer before subsetting
selected_species <- summary_iris[as.integer(input$summary_rows_selected), ]$Species
iris[iris$Species %in% selected_species, ]
)
# display the subsetted data
output$drilldown <- DT::renderDataTable(drilldata())
shinyApp(ui, server)
【讨论】:
R 怎么知道 Input$summary_rows_selected 是什么?由于任何带有 inputid summary_rows_selected 的东西都没有在代码中定义,而是直接调用。 没关系!如果其他人有同样的问题,input$tableId_rows_selected 是 DT 中的预定义函数。 rstudio.github.io/DT/shiny.html以上是关于在 R Shiny 中创建向下钻取报告的主要内容,如果未能解决你的问题,请参考以下文章