2017-06-21 13 views
1

我生成有关下列变量疾病数据帧:[R闪亮 - 如何创建作出反应,通过时间单位根据时间单位(周,月,年)和聚合数据的barplot

  • 日期(发病时间)
  • 例(例数,默认情况下,案件数为1)
  • 周(疾病情况下一周)
  • 月(疾病情况下一个月)
  • 年(一年的病例)。

我的UI是在这里:

library(shiny) 
library(dplyr) 
library(lubridate) 
library(ggplot2) 
library(scales) 

Disease<-data.frame(Date=seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),Cases=rep(1)) 
Disease$Week<-as.Date(cut(Disease$Date,breaks="week",start.on.monday = TRUE)) 
Disease$Month<-as.Date(cut(Disease$Date,breaks="month")) 
Disease$Year<-as.Date(cut(Disease$Date,breaks="year")) 

ui <- fluidPage(
     dateRangeInput("daterange", "Choice the date", 
     start = min(Disease$Date), 
     end = max(Disease$Date), 
     min = min(Disease$Date), 
     max = max(Disease$Date), 
     separator = " - ", format = "dd/mm/yy", 
     startview = 'Month', language = 'fr', weekstart = 1), 
     selectInput(inputId = 'Time_unit', 
     label='Time_unit', 
     choices=c('Week','Month','Year'), 
     selected='Month'), 
plotOutput("Disease")) 

我希望创建严正根据时间单位(即一周,一个月,一年)barplot,并通过时间单位agregates数据

你会发现下面的服务器的代码(但它不工作):

server <- function(input, output) { 
     dateRangeInput<-reactive({ 
     dataset= subset(Disease, Date >= input$daterange[1] & Date <= 
     input$daterange[2]) 
     return(dataset) 
     }) 
selectInput= reactive({ 
summarize(group_by(dateRangeInput(), 
period = switch(input$Time_unit, 
"Week"=Disease$Week, 
"Month" = Disease$Month, 
"Year" = Disease$Year))) 
}) 

output$Disease <-renderPlot({ 
ggplot(data=selectInput(), aes_string(x="period",x="Cases")) 
+ stat_summary(fun.y = sum, geom = "bar") 
+ labs(title="Disease", y ="Number of cases") 
+theme_classic() 
+theme(plot.title = element_text(hjust = 0.5)) 
}) 

} 
shinyApp (ui = ui, server = server) 

你会发现以下barlines,我想获得如果我选择周或一个月或一年:

对不起 “按年”,我不能发布更多比2链接

+0

我忘了说:你好! – Pascal

回答

0

您可以检查这个代码,它工作如何你想要的:

library(shiny) 
library(dplyr) 
library(lubridate) 
library(ggplot2) 
library(scales) 

Disease<-data.frame(Date=seq(as.Date("2015/1/1"), as.Date("2017/1/1"), "days"),Cases=rep(1)) 
Disease <- Disease %>% mutate(Week = format(Date, "%Y-%m-%U"),Month = format(Date, "%Y-%m"), Year = format(Date, "%Y")) 

ui <- fluidPage(
    dateRangeInput("daterange", "Choice the date", 
       start = min(Disease$Date), 
       end = max(Disease$Date), 
       min = min(Disease$Date), 
       max = max(Disease$Date), 
       separator = " - ", format = "dd/mm/yy", 
       startview = 'Month', language = 'fr', weekstart = 1), 
    selectInput(inputId = 'Time_unit', 
       label='Time_unit', 
       choices=c('Week','Month','Year'), 
       selected='Month'), 
    plotOutput("Disease")) 


server <- function(input, output) { 
    dateRangeInput<-reactive({ 
    dataset <- subset(Disease, Date >= input$daterange[1] & Date <= input$daterange[2]) 
    dataset 
    }) 
    selectInput= reactive({ 
    dataset <- dateRangeInput() %>% group_by_(input$Time_unit) %>% summarise(Sum = sum(Cases)) 
    print(head(dataset)) 
    dataset 
    }) 

    output$Disease <-renderPlot({ 
    ggplot(data=selectInput(), aes_string(x=input$Time_unit,y="Sum")) + geom_bar(stat="identity") + 
    labs(title="Disease", y ="Number of cases") + 
    theme_classic() + 
    theme(plot.title = element_text(hjust = 0.5)) 
    }) 

} 
shinyApp (ui = ui, server = server) 

绘图对Time_unit输入有反应,您只需要对轴文本进行小调整即可。

P.S.你的第二个链接图像

通过

不工作 - >得到一个空的空间。

+0

亲爱的Malvina_a,它很完美。我感谢你的帮助。对于图片抱歉。如果可能的话,我有最后一个问题。如果我想制作一个堆叠barplot,就是说,有两个变量(例如,导入的案例编号和autocchtonous案例编号),根据您的具体情况,我如何编码它:dataset < - dateRangeInput()%>% group_by_(input $ Time_unit)%>%summarize(Sum1 = sum(Imported_Cases),Sum2 = sum(Autochtonous_Cases)?Thank you for advance。 – Pascal

+0

是的你应该按照你的写法来创建堆积条形图,在'ggplot' –

+0

@ Malvina_ a计算'sum'并创建变量用作填充参数后,必须“融化”数据 – Pascal

相关问题