Shiny: Создайте динамическую таблицу данных на основе события клика для другой таблицы данных - PullRequest
0 голосов
/ 28 марта 2019

Я создаю блестящее приложение с реактивными значениями, где при выборе строки
1.) он выберет узел и
2.) найти весь маршрут, связанный с этим узлом, во всем фрейме данных
3.) Отфильтровать оригинал df по указанному выше маршруту.

df <- data.frame("Route" = c("R2","R2","R2","R3","R2","R1","R2","R3","R1"),
             "Nodes" = c("N1","N2","N2","N3","N2","N1","N3","N3","N2"),
             "X1" = c(81,65,61,64,59,51,69,95,99),
             "X2" = c(7,8,15,1,5,10,4,7,8))


 library(shiny)
 library(shinydashboard)
 library(DT)



 ui <- dashboardPage(
 dashboardHeader(title = "Dynamic Table"),
 dashboardSidebar(sidebarMenu(menuItem("Route", tabName = "tab_01"))),
 dashboardBody(tabItems(
 tabItem(tabName = "tab_01",
        tabsetPanel(
          tabPanel("T1", DT::DTOutput("table_01")),
          tabPanel("T2", DT::DTOutput("table_02"))
        )
        )))
 )


server <- function(input, output){
output$table_01 <- renderDT(datatable(data = df, selection = "single"))




output$table_02 <- renderDT(datatable({
s=input$table_01_rows_selected
n <- unique(df[s,c("Nodes")])
data = df[df$Nodes %in% n,]
}))

}

shinyApp(ui, server)

Так что, в основном, если я выберу строку № 4, то есть узел "N3". Маршрутом, связанным с «N3», являются «R2» и «R3». Наконец, я должен отфильтровать все маршруты, которые имеют "R2" и "R3" в DF.

1 Ответ

0 голосов
/ 28 марта 2019

Это то, что вы ищете?

output$table_02 <- renderDT({
    #  selected row from tab1
    selected_row=input$table_01_rows_selected
    # store its node value
    node <- unique(df[selected_row, "Nodes"])
    # find all the routes that are linked with the stored node value
    routes =  df[df$Nodes %in% node,]
    # show only those observation having the route id that we found in the previous step
    datatable(
      df[df$Route %in% routes$Route,]
    )
  })
...