我有一个带1个输入选择,一个操作按钮和两个表的flexdashboard。我希望使用由操作按钮触发的输入选择来过滤第一个表。然后,我想根据表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")
})
请帮助
答案 0 :(得分:0)
目前还不清楚您要对第二张桌子做什么。对于第一个,您可以尝试创建一个反应性数据框,该数据框返回过滤后的数据框:
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框架是反应式数据框的最佳实践,但对我来说效果很好。