【发布时间】:2018-02-19 17:59:32
【问题描述】:
我对 Shiny(和一般的 R)相当陌生,并且一直在努力创建一个应用程序,该应用程序可以按储备、类别、使用类型和年份对数据进行子集化,以便创建随时间变化的使用条形图和饼图,平均使用三个类别之间的每一个。这是我的数据的示例:
Reserve Category Users UserDays Year
S Research 31 9735 2002
S Education 71 77 2002
S Public 0 0 2002
S Research 58 21596 2003
S Education 387 509 2003
S Public 188 219 2003
V Research 43 642 2012
V Education 12 60 2012
V Public 874 2882 2012
V Research 51 458 2013
V Education 27 108 2013
V Public 1003 1932 2013
这是我的代码目前的样子:
library(shiny)
library(tidyverse)
library(ggplot2)
library(dplyr)
ReserveData <- read_csv("DataTotals.csv")
View(ReserveData)
ui <- fluidPage(
titlePanel("Data Analysis"),
sidebarLayout(
sidebarPanel(
selectInput("Reserve", "Reserve:", choices = c("S", "V")),
selectInput("UseStatistic", "Use Statistic:", choices = c("Users", "UserDays")),
checkboxGroupInput("Category", label = h3("Category"),
choices = list("Research" = 1, "Education" = 2, "Public" = 3),selected = 1),
hr(),
fluidRow(column(3, verbatimTextOutput("Category"))),
fluidRow(
column(4,
sliderInput("Years", label = h3("Years"), min = 2002,
max = 2017, value = c(2002, 2017))
)
),
hr(),
fluidRow(
column(4, verbatimTextOutput("value")),
column(4, verbatimTextOutput("Years")))
),
mainPanel(
tableOutput("Categories"),
plotOutput(outputId = "distPlot"),
plotOutput("distPie")
)
)
)
server <- function(input, output) {
output$Categories <- renderTable({
ReserveDATA <- filter(ReserveData, Reserve == input$Reserve)
ReserveDATA <- filter(ReserveDATA, Year >= input$Years[1] & Year <= input$Years[2])
if(is.null(input$Category))
return()
Reserve_Data <- ReserveDATA[input$Category, ]
Reserve_Data
})
output$distPlot <- renderPlot({
ReserveDATA <- filter(ReserveData, Reserve == input$Reserve)
ReserveDATA <- filter(ReserveDATA, Year >= input$Years[1] & Year <= input$Years[2])
if(is.null(input$Category))
return()
Reserve_Data <- ReserveDATA[input$Category, ]
ggplot(data = Reserve_Data, aes(x=Year, y = input$UseStatistic, fill = Category)) +
geom_bar(stat = "identity", position=position_dodge())
})
output$distPie <- renderPlot({
ReserveDATA <- filter(ReserveData, Reserve == input$Reserve)
ReserveDATA <- filter(ReserveDATA, Year >= input$Years[1] & Year <= input$Years[2])
pie(ReserveDATA$Users, labels = ReseveDATA$Category)
})
}
shinyApp(ui, server)
我不知道为什么当我尝试按类别进行子集化时,我只显示第一年,而不是我正在查看的所有年份。此外,当我尝试显示包含用户和用户天数的条形图时,我没有显示该列中的数字,而是只得到一个显示用户或用户天数的图表(而不是实际数据)。我的饼图目前没有任何显示。
无论如何,任何帮助将不胜感激!
【问题讨论】: