R Shiny 显示没有过滤器输入的完整数据帧,直到更改过滤器输入
R Shiny display full dataframe without filter input until filterinputs are changed
我正在尝试开发一个将数据框显示为数据的应用程序uitable。我想为用户提供使用侧边栏面板上的 selectinput 和 date运行geinput 过滤器对 datatable 进行子集化的能力。
当我 运行 遇到问题时,
- 它仅在选择所有输入时对数据进行子集化table
- 加载应用程序时显示空数据table
- 当其中一个输入改回时,它不会更新
数据table.
这是我的闪亮应用示例代码
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)
})
})
当应用程序启动时,它不会显示 table 没有应用任何过滤器。
我不确定我是否在 output$table 函数中执行所有操作以获得我想要的输出。
如果有人可以告诉我如何在没有任何用户输入的情况下显示数据table,然后数据table 随着用户输入的改变而更新。
我尝试将输入因素置于反应性环境中,但随后弹出没有反应性上下文不允许操作。
Server.R
shinyServer(function(input,output,session){
data_update <- reactive({
# Compose data frame
data.frame(
Name = c("Region",
"Company",
"Status"),
Value = as.character(c(input$region,
input$company,
input$status)),
stringsAsFactors=FALSE)
})
# Show the values using an HTML table
output$table <- renderTable({
data_update()
})
})
UI.R
shinyUI(
fluidPage(
titlePanel("Summary"),
sidebarLayout(
sidebarPanel(
selectInput("region",
label = "Choose a Region",
choices = c("", unique(df$Region)), selected= '1'),
selectInput("company",
label = "Choose a company",
choices = c("", unique(df$Company)), selected= '1'),
selectInput("status",
label = "Choose Proj status",
choices = c("", unique(df$Status)), selected= '1'),
dateRangeInput("projdate",
label = "Date of interest:",
start = Sys.Date() - 60,
end = Sys.Date())
),
mainPanel(
tableOutput("table")
)
)
))
GLOBAL.R
library(shiny)
library(dplyr)
library(DT)
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)
我还建议使用 DT 包来绘制您的 table。
希望对您有所帮助!干杯
===更新后的答案===
这是一个可行的解决方案。
library(shiny)
library(dplyr)
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 <- shinyUI(
fluidPage(
titlePanel("Summary"),
sidebarLayout(
sidebarPanel(
selectInput("region",
label = "Choose a Region",
choices = c("", as.vector(unique(df$Region)))),
selectInput("company",
label = "Choose a company",
choices = c("", as.vector(unique(df$Company)))),
selectInput("status",
label = "Choose Proj status",
choices = c("", as.vector(unique(df$Status)))),
dateRangeInput("projdate",
label = "Date of interest:",
start = Sys.Date() - 60,
end = Sys.Date())
),
mainPanel(
tableOutput("table")
)
)
))
server <- shinyServer(function(input,output){
output$table <- renderTable({
region_sel <- if (nchar(input$region)==0) unique(as.vector(df$Region)) else input$region
company_sel <- if (nchar(input$company)==0) unique(as.vector(df$Company)) else input$company
status_sel <- if (nchar(input$status)==0) unique(as.vector(df$Status)) else input$status
filter(df, Region %in% region_sel, Company %in% company_sel, Status %in% status_sel)
})
})
shinyApp(ui = ui, server = server)
===上一个答案===
不是直接的答案,但这里有一个非常相似的示例,可能会对您有所帮助。
library(shiny)
library(dplyr)
ui <- shinyUI(fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
selectInput("cyl", "cyl", unique(mtcars$cyl), multiple = TRUE),
selectInput("vs", "vs", unique(mtcars$vs), multiple = TRUE),
selectInput("am", "am", unique(mtcars$am), multiple = TRUE)
),
mainPanel(
tableOutput("table")
)
)
))
server <- shinyServer(function(input, output) {
output$table <- renderTable({
cyl_sel <- if (is.null(input$cyl)) unique(mtcars$cyl) else as.numeric(input$cyl)
vs_sel <- if (is.null(input$vs)) unique(mtcars$vs) else as.numeric(input$vs)
am_sel <- if (is.null(input$am)) unique(mtcars$am) else as.numeric(input$am)
filter(mtcars, cyl %in% cyl_sel, vs %in% vs_sel, am %in% am_sel)
})
})
shinyApp(ui = ui, server = server)
我正在尝试开发一个将数据框显示为数据的应用程序uitable。我想为用户提供使用侧边栏面板上的 selectinput 和 date运行geinput 过滤器对 datatable 进行子集化的能力。
当我 运行 遇到问题时,
- 它仅在选择所有输入时对数据进行子集化table
- 加载应用程序时显示空数据table
- 当其中一个输入改回时,它不会更新 数据table.
这是我的闪亮应用示例代码
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)
})
})
当应用程序启动时,它不会显示 table 没有应用任何过滤器。 我不确定我是否在 output$table 函数中执行所有操作以获得我想要的输出。
如果有人可以告诉我如何在没有任何用户输入的情况下显示数据table,然后数据table 随着用户输入的改变而更新。
我尝试将输入因素置于反应性环境中,但随后弹出没有反应性上下文不允许操作。
Server.R
shinyServer(function(input,output,session){
data_update <- reactive({
# Compose data frame
data.frame(
Name = c("Region",
"Company",
"Status"),
Value = as.character(c(input$region,
input$company,
input$status)),
stringsAsFactors=FALSE)
})
# Show the values using an HTML table
output$table <- renderTable({
data_update()
})
})
UI.R
shinyUI(
fluidPage(
titlePanel("Summary"),
sidebarLayout(
sidebarPanel(
selectInput("region",
label = "Choose a Region",
choices = c("", unique(df$Region)), selected= '1'),
selectInput("company",
label = "Choose a company",
choices = c("", unique(df$Company)), selected= '1'),
selectInput("status",
label = "Choose Proj status",
choices = c("", unique(df$Status)), selected= '1'),
dateRangeInput("projdate",
label = "Date of interest:",
start = Sys.Date() - 60,
end = Sys.Date())
),
mainPanel(
tableOutput("table")
)
)
))
GLOBAL.R
library(shiny)
library(dplyr)
library(DT)
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)
我还建议使用 DT 包来绘制您的 table。
希望对您有所帮助!干杯
===更新后的答案===
这是一个可行的解决方案。
library(shiny)
library(dplyr)
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 <- shinyUI(
fluidPage(
titlePanel("Summary"),
sidebarLayout(
sidebarPanel(
selectInput("region",
label = "Choose a Region",
choices = c("", as.vector(unique(df$Region)))),
selectInput("company",
label = "Choose a company",
choices = c("", as.vector(unique(df$Company)))),
selectInput("status",
label = "Choose Proj status",
choices = c("", as.vector(unique(df$Status)))),
dateRangeInput("projdate",
label = "Date of interest:",
start = Sys.Date() - 60,
end = Sys.Date())
),
mainPanel(
tableOutput("table")
)
)
))
server <- shinyServer(function(input,output){
output$table <- renderTable({
region_sel <- if (nchar(input$region)==0) unique(as.vector(df$Region)) else input$region
company_sel <- if (nchar(input$company)==0) unique(as.vector(df$Company)) else input$company
status_sel <- if (nchar(input$status)==0) unique(as.vector(df$Status)) else input$status
filter(df, Region %in% region_sel, Company %in% company_sel, Status %in% status_sel)
})
})
shinyApp(ui = ui, server = server)
===上一个答案===
不是直接的答案,但这里有一个非常相似的示例,可能会对您有所帮助。
library(shiny)
library(dplyr)
ui <- shinyUI(fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
selectInput("cyl", "cyl", unique(mtcars$cyl), multiple = TRUE),
selectInput("vs", "vs", unique(mtcars$vs), multiple = TRUE),
selectInput("am", "am", unique(mtcars$am), multiple = TRUE)
),
mainPanel(
tableOutput("table")
)
)
))
server <- shinyServer(function(input, output) {
output$table <- renderTable({
cyl_sel <- if (is.null(input$cyl)) unique(mtcars$cyl) else as.numeric(input$cyl)
vs_sel <- if (is.null(input$vs)) unique(mtcars$vs) else as.numeric(input$vs)
am_sel <- if (is.null(input$am)) unique(mtcars$am) else as.numeric(input$am)
filter(mtcars, cyl %in% cyl_sel, vs %in% vs_sel, am %in% am_sel)
})
})
shinyApp(ui = ui, server = server)