2015-05-05 10 views
8

Jestem nowy shiny ale zastanawiałem się, czy istnieje jakikolwiek sposób, aby przechowywać filtrowane DataTable (z wykorzystaniem filtrów kolumn) w R obiektu tak, że ten filtrowane dane mogą być przekazywane do histogramu i funkcje wydruku.Korzystanie filtrowane DataTables w błyszczące

EDIT 07 maja 15: Łącznie autora rozszerzonym wyjaśnień od komentarzy

chcę tabelę, aby filtrowane za pomocą wbudowanych filtrów kolumn i następnie chcą fabuła, aby automatycznie dostosować. Próbowałem już pakietu DT , ale nie podoba mi się wiele filtrów kolumnowych, które przychodzą z tym pakietem, ponieważ nie jest możliwe (jak sądzę) usunięcie filtrów z podzbioru kolumn w tabeli

+1

Twoje pytanie jest wciąż niejasne. Czy chcesz, aby data.table była filtrowana przy użyciu niektórych danych wejściowych, które wybierze użytkownik (jak wartość z widżetu 'selectInput'), a następnie twoja fabuła automatycznie dostosuje się? –

+1

jeśli używasz pakietu 'DT', do renderowania DataTable' input $ table_rows_all' zawiera indeksy filtrowanych wierszy. Istnieje przykład [tutaj] (https://yihui.shinyapps.io/DT-info/) – NicE

+0

Chcę, aby tabela została przefiltrowana przy użyciu wbudowanych filtrów kolumn, a następnie aby działka automatycznie się dostosowała. Próbowałem już pakietu DT, ale nie lubię bardzo wielu filtrów kolumn, które są dostarczane z tym pakietem, ponieważ nie jest możliwe (jak sądzę) usunięcie filtrów z podzbioru kolumn w tabeli. – jperdigao

Odpowiedz

5

Właśnie budując na użytkownika @ JasonAizkalns przykład, można ukryć niektóre z wbudowanych filtrów kolumny stosując jQuery. na przykład tutaj pierwsze dwa są ukryte:

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

Dzięki! To działa idealnie. – jperdigao

4

Proponowany przez @NicE numer example jest bardzo pomocny. Ja tym minimalny przykład poniżej

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"]) 
    }) 
    } 
) 

ten generuje histogram Sepal.Length z danych przedstawionych na iris filtrowanych danych w DT::datatable.

Uwaga: Ta zakłada następujące wersje DT i shiny:

DT_0.0.39 shiny_0.11.1.9005