Таблица фильтров с кнопкой действия и 2-й таблицей с перекрестными помехами - PullRequest
0 голосов
/ 25 октября 2018

У меня есть flexdashboard с 1 выбором входа, кнопкой действия и двумя таблицами.Я хочу, чтобы первая таблица была отфильтрована с использованием выбора ввода, запускаемого кнопкой действия.Затем я хочу отфильтровать 2-ю таблицу в зависимости от выбранной строки из таблицы 1. Для последней я подумываю использовать перекрестные помехи.

Это работает (на примере: stackoverflow.com/questions/48581598/filter-two-tables-with-crosstalk):

df1 <- structure(list(owner = structure(c(1L, 2L, 2L, 2L, 2L), .Label = c   ("John", "Mark"), class = "factor"), hp = c(250, 120, 250, 100, 110), car =    structure(c(2L, 2L, 2L, 1L, 1L), .Label = c("benz", "bmw"), class = "factor"),  id = structure(1:5, .Label = c("car1", "car2", "car3", "car4", "car5"), class = "factor")), .Names = c("owner", "hp", "car", "id"), row.names = c(NA, -5L), class = "data.frame")

df2 <- structure(list(car = structure(c(1L, 2L, 1L, 2L), .Label = c  ("benz","bmw"), class = "factor"), owner = structure(c(1L, 1L, 2L, 2L), .Label  = c("John", "Mark"), class = "factor"), freq = c(0L,1L, 2L, 2L)), .Names = c  ("car", "owner", "freq"), row.names = c(NA, -4L), class = "data.frame")

shared_df1 <- SharedData$new(df1, ~owner, group = "Choose owner")
shared_df2 <- SharedData$new(df2, ~owner, group = "Choose owner")

filter_select("owner", "Car owner:", shared_df1, ~owner)

DT::datatable(shared_df1)
DT::datatable(shared_df2)
#---------------------------

Но добавление этого не делает:

selectInput(inputId = 'owner', label = NULL, choices =c("All", "John", "Mark"), selected ="All")

actionButton("Find", "Find owner ")

observeEvent(input$Find,{
df1<-df1%>%filter(a==input$owner|input$owner=="All")
})

Пожалуйста, помогите

1 Ответ

0 голосов
/ 29 октября 2018

Не совсем понятно, что вы хотите сделать со второй таблицей.Что касается первого, вы можете попробовать создать реактивный фрейм данных, который возвращает отфильтрованный фрейм данных:

df1_filtered = reactive({
  if(input$owner != "All"){
    df1 %>% filter(owner == input$owner)
  } else {
    df1
  }
})

df2_filtered = reactive({
  if(condition for second table){
    # If you wanted to filter the second owners in the first df
    df2 %>% filter(owner %in% df1_filtered()$owner)
  } else {
    df2
  }
})


observeEvent(input$Find,{
  renderTable(df1_filtered())
})

Но дайте мне знать, что именно вы хотите сделать, и я могу это изменить.Кроме того, я не уверен на 100%, что старая структура if-else является наилучшей практикой для реактивных фреймов данных, но она хорошо сработала для меня.

...