2017-04-06 3 views
6

Ich versuche, mit ‚n‘ Anzahl der Spalten einer Datentabelle angezeigt werden, wie untenErstellen von Drill-Down-Bericht in R Shiny

gezeigt
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 

Ich möchte diese Datentabelle durch Aktivieren der Drill-down/drill interaktiv machen durch Funktionalität, wobei ein Benutzer auf jeden der Werte im Feld "Anzahl der Schüler" klicken kann, um die zugrundeliegenden Rohdaten hinter diesen Zahlen 10, 20, 30 und 40 zu sehen. Beispiel: Wenn ein Benutzer auf "10 ", sollte er/sie in der Lage sein, die rohen Daten des Schülers hinter dieser Zählung zu sehen. Dies ähnelt dem Konzept der Pivot-Tabellen in Excel, bei dem Benutzer die zugrunde liegenden Daten hinter den Pivot-Tabellen sehen können. Gibt es eine Möglichkeit, das gleiche mit R Shiny zu tun?

+0

Zwei Dinge: Wie sollte der Bohrer existiert unten im ui; Wie hast du die Daten in die Tabelle bekommen? Sie müssen sowohl ein ui -Erlebnis in shiny handles erstellen, das Drilldown ausführen, als auch eine Möglichkeit, Daten zu verarbeiten, die einen Klick auf '10' mit einem Datenrahmen verbinden, der um '10' von dieser Spalte untergeordnet sein kann. –

Antwort

7

Ja, mit dem DT-Paket, um die ausgewählten Zeilen zu erfassen und den Hauptsatz zu unterteilen. Hier ist ein Beispiel mit dem iris Satz:

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

Woher weiß R, was Input $ summary_rows_selected ist? Da alles mit inputid summary_rows_selected nicht im Code definiert ist, sondern direkt aufgerufen wird. – Digvijay

+0

Vergiss es! Wenn jemand anders die gleiche Frage hatte, ** Eingabe $ tableId_rows_selected ** ist eine vordefinierte Funktion in DT. https://rstudio.github.io/DT/shiny.html – Digvijay