2015-05-05 9 views
8

ich shiny bin hier, aber frage mich, ob es eine Möglichkeit ist ein gefiltert Datentabelle (unter Verwendung der Spaltenfilter) in einem R Objekt zu speichern, so dass diese gefilterten Daten an Histogramm übergeben werden kann und Plotfunktionen.gefilterten Datentabellen Verwendung in glänzenden

EDIT 7. Mai 15: einschließlich dem erweiterten Erklärung des Autors von Kommentaren

ich die Tabelle will die integrierten Spalte Filter und dann erhalten gefiltert mit wollen, dass die Handlung automatisch anpassen. Ich habe bereits versucht, das DT Paket, aber ich mag nicht sehr viel der Spaltenfilter, die kommen mit diesem Paket, wie es nicht möglich ist (denke ich), die Filter aus einer Teilmenge der Spalten in der Tabelle zu entfernen

+1

Ihre Frage ist noch unklar. Möchten Sie, dass die data.table mit einigen Eingaben gefiltert wird, die der Benutzer wählt (wie ein Wert aus einem 'selectInput'-Widget) und dann wird Ihr Plot automatisch angepasst? –

+1

Wenn Sie das Paket 'DT' verwenden, um Ihre DataTable' input $ table_rows_all 'zu rendern, enthält die Indizes der gefilterten Zeilen. Es gibt ein Beispiel [hier] (https://yihui.shinyapps.io/DT-info/) – NicE

+0

Ich möchte, dass die Tabelle mit den integrierten Spaltenfiltern gefiltert wird und dass das Diagramm dann automatisch angepasst werden soll. Ich habe das DT-Paket bereits ausprobiert, aber ich mag nicht sehr viel von den Spaltenfiltern, die mit diesem Paket geliefert werden, da es nicht möglich ist (denke ich), die Filter aus einer Teilmenge der Spalten in der Tabelle zu entfernen. – jperdigao

Antwort

5

Aufbau einfach auf @ JasonAizkalns dem Beispiel, können Sie einige der eingebauten in Spaltenfilter mit jQuery ausblenden. zum Beispiel sind hier die ersten zwei versteckt:

library(shiny) 
library(DT) 

shinyApp(
    ui = fluidPage(dataTableOutput('tbl'), 
       plotOutput('plot1')), 
    server = function(input, output) {  
    output$tbl = renderDataTable({ 
     datatable(iris, filter="top",options = list(lengthChange = FALSE),callback=JS(" 
      //hide column filters for the first two columns 
      $.each([0, 1], function(i, v) { 
       $('input.form-control').eq(v).hide() 
       });")) 
    }) 
    output$plot1 = renderPlot({ 
     filtered_data <- input$tbl_rows_all 
     hist(iris[filtered_data, "Sepal.Length"]) 
    }) 
    } 
) 
+0

Danke! Das funktioniert perfekt. – jperdigao

4

Die von @NicE vorgeschlagene example ist sehr hilfreich. Ich bin auch ein minimales Beispiel unten:

library(shiny) 
library(DT) 

shinyApp(
    ui = fluidPage(dataTableOutput('tbl'), 
       plotOutput('plot1')), 
    server = function(input, output) {  
    output$tbl = renderDataTable({ 
     datatable(iris, options = list(lengthChange = FALSE)) 
    }) 
    output$plot1 = renderPlot({ 
     filtered_data <- input$tbl_rows_all 
     hist(iris[filtered_data, "Sepal.Length"]) 
    }) 
    } 
) 

Dies wird ein Histogramm der Sepal.Length aus den iris Daten für die gefilterten Daten im DT::datatable gesetzt erzeugen.

Hinweis: Dies setzt voraus, die folgenden Versionen von DT und shiny:

DT_0.0.39 shiny_0.11.1.9005