【发布时间】:2016-11-01 16:30:34
【问题描述】:
我正在尝试构建一个将数据框显示为数据表的应用程序。我想为用户提供使用侧边栏面板上的 selectinput 和 daterangeinput 过滤器对数据表进行子集化的能力。
当我遇到问题时,
- 仅在选择所有输入时才对数据表进行子集化
- 它在加载应用程序时显示一个空数据表
- 当其中一个输入被改回时,它不会更新 数据表。
这是我的闪亮应用示例代码
Region <- c("USA","UK","JPN","JPN","UK","USA","USA")
Company <- c("A","B","C","A","B","C","A")
Status <- c("Completed","In Production","In Design","New","In Production","In Design","New")
date <- c("2015-05-01","2015-05-01","2015-06-04","2015-06-20","2015-07-15","2015-08-12","2015-08-12")
date <- as.Date(date,"%Y-%m-%d")
df <- data.frame(Region, Company, Status, date)
ui文件是
ui.R
shinyUI(
fluidPage(
titlePanel("Summary"),
sidebarLayout(
sidebarPanel(
selectInput("region",
label = "Choose a Region",
choices = c("", unique(df$Region))),
selectInput("company",
label = "Choose a company",
choices = c("", unique(df$Company))),
selectInput("status",
label = "Choose Proj status",
choices = c("", unique(df$Status))),
dateRangeInput("projdate",
label = "Date of interest:",
start = Sys.Date() - 60,
end = Sys.Date())
),
mainPanel(
dataTableOutput("table")
)
)
))
服务器文件是
server.R
shinyServer(function(input,output){
output$table <- renderTable({
datadf %>% as.data.frame() %>% filter(Region == input$region & Company == input$company & Status == input$status)
})
})
当应用启动时,它不会在未应用任何过滤器的情况下显示表格。 我不确定我是否在 output$table 函数中做所有事情以获得我想要的输出。
如果有人可以指导我如何在没有任何用户输入的情况下显示数据表,然后数据表会随着用户输入的更改而更新。
我尝试将输入因子放置在响应式环境中,但随后弹出没有响应式上下文的操作。
【问题讨论】:
-
您需要将过滤器更改为
filter(Region %in% selection),其中selection是所有选项的向量,如果没有选择任何选项。 -
应该像 'selection = c(input$Region, input$Company, input$Status)' 这样如果选择其中一个输入,则显示与这些输入匹配的数据表?谢谢
-
不,您仍然需要多个过滤器,但我的意思是对于每个过滤器,如果未选择任何内容,则需要假设所有选项都已选择。例如,如果没有选择区域,
selection应该是所有区域的向量。否则你会得到一个空的结果。 -
所以我为每个输入创建了单独的向量,例如'regionselect
标签: r dynamic datatable shiny user-input