2017-04-06 180 views
6

我試圖與列的「N」數字顯示數據表如下圖所示創建R中深入報表閃亮

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中的Pivot表概念類似,用戶可以在其中查看Pivot表背後的基礎數據。有沒有辦法使用R Shiny做同樣的事情?

+0

兩件事情:應該如何鑽取存在於用戶界面;你是如何將數據輸入表格的?你必須創建一個ui的經驗,用閃亮的句柄來處理下鑽,以及一種處理數據的方法,將點擊'10'的數據連接到可以從該列中的子集'10'的數據框。 –

回答

7

是的,使用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

+0

R如何知道輸入$ summary_rows_selected是什麼?由於inputid summary_rows_selected中的任何內容都沒有在代碼中定義,而是直接調用。 – Digvijay

+0

沒關係得到它! 如果其他人有同樣的問題,**輸入$ tableId_rows_selected **是DT中的預定義函數。 https://rstudio.github.io/DT/shiny.html – Digvijay