【发布时间】:2018-10-03 12:43:18
【问题描述】:
我正在基于以下示例数据框开发闪亮仪表板:
Date Year Month Week Wday Day Time ActiveEnergy
2/1/2009 2009 2 5 Sun 1 0 55.36111
3/1/2009 2009 3 9 Sun 1 0 9.334444
4/1/2007 2007 4 14 Sun 1 0 41.27667
6/1/2008 2008 6 22 Sun 1 0 32.89833
7/1/2007 2007 7 27 Sun 1 0 27.11667
8/1/2010 2010 8 31 Sun 1 0 4.871111
在 sidebarMenu 的子菜单“历史”下,我想显示用户选择的时间范围内消耗的 ActiveEnergy 的 barplot (ggplot)。这是通过在 sidebarMenu 中包含的日历(“dateRange”)中选择 dateRangeInput(开始和结束日期)来完成的。
反过来,我希望条形图的 x 轴 是由“选择时间间隔”选择输入动态选择的频率聚合的 选定时间范围 .
为此,我在服务器中创建了frequency 变量,它将选择的input$TimeInterval 转换为我想在“聚合”函数中使用的“by”变量(例如“Weekly”=“Wday” )。
但是,我无法将反应式 input$dateRange、input$TimeInterval 和聚合函数组合在一起。
关于如何正确编写此级联过滤的任何想法?
以下是我的代码供您参考:
server <- function(input, output) {
frequency <- observe({
ifelse(input$TimeInterval=="Daily", "Hour",
ifelse(input$TimeInterval=="Weekly", "Week",
ifelse(input$TimeInterval=="Monthly", "Month",
ifelse(input$TimeInterval=="Yearly", "Date"))))
})
filteredData <- reactive({
data %>% filter(Date>=input$dateRange[1] & Date<=input$dateRange[2])%>%
select(frequency(), ActiveEnergy)
})
df<-reactive({
freq<-paste(frequency())
aggregate(filteredData(), filteredData()[[freq]] , FUN=mean, na.rm=TRUE)
})
output$plot1 <- renderPlot({
ggplot(df(), aes(x=frequency(), y=ActiveEnergy)) + geom_bar(stat = "identity", fill="steelblue")
})
}
shinyApp(ui, server)
【问题讨论】:
-
你应该提供一个可重复的例子..而不是
aes(x=frequency()..,我认为应该是aes_string(x=frequency()...。
标签: r shiny aggregate shinydashboard reactive