У меня блестящее приложение, которое имеет три вкладки:
1-я вкладка: импорт данных 2-я вкладка: динамическая c блок-схема на основе выбранного значения в столбце (id
) 3-я вкладка: динамическая c блокпост на основе выбранного диапазона дат (date
столбец)
Мое приложение работает нормально. Тем не менее, я хотел бы добавить еще одну функцию на мою вторую вкладку, которая является диапазоном дат. Итак, я хочу иметь два фильтра на моей второй вкладке. Например, я сначала выбираю id
A
, а после этого я выбираю диапазон дат и др aws коробочный график. Я включил пример данных.
df <- data.frame("date" = c("2020-01-01", "2020-01-01", "2020-01-02", "2020-01-02", "2020-01-03"), "id" = c("A", "A", "B", "B", "C"), "number" = c(1, 3, 2, 5, 4))
write.csv(df, "df.csv", row.names = F)
library(shiny)
library(dplyr)
library(ggplot2)
if (interactive()) {
ui <- fluidPage(
tabsetPanel(
tabPanel("Import Data", fileInput("file", "Upload Your File:")),
# How do I add one more uiOutput here?
tabPanel("Number By Table", uiOutput("ids"), plotOutput("plot1")),
tabPanel("Number By Date", uiOutput("daterange"), plotOutput("plot2"))
)
)
server <- function(input, output, session) {
df <- reactive({
req(input$file)
inFile <- input$file
read.csv(inFile$datapath, stringsAsFactors = F)
})
output$ids <- renderUI({
selectizeInput("id",
"Select Your ID:",
choices = sort(unique(df()$id)))
})
output$daterange <- renderUI({
dates <- as.Date(df()$date)
dateRangeInput("daterange", "Select the date range:",
start = min(dates), end = max(dates),
min = min(dates), max = max(dates)
)
})
output$plot1 <- renderPlot({
dfplot1 <- filter(df(), df()$id == input$id)
# I tried the below code, but it doesn't work
# dfplot1 <- subset(dfplot1, date >= input$daterange[1] & date <= input$daterange[2])
g1 <- ggplot(dfplot1, aes(date, number)) +
geom_boxplot()
print(g1)
output$plot2 <- renderPlot({
dfplot2 <- subset(df(), date >= input$daterange[1] & date <= input$daterange[2])
g2 <- ggplot(dfplot2, aes(id, number)) +
geom_boxplot()
print(g2)
})
})
}
shinyApp(ui = ui, server = server)
}