web-dev-qa-db-ja.com

Rシャイニーでドリルダウンレポートを作成する

以下に示すように、列数が「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シャイニーを使って同じことができる方法はありますか?

10
Deepika

はい、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)

enter image description here

13
mlegge