[R闪亮 - 如何创建作出反应,通过时间单位根据时间单位(周,月,年)和聚合数据的barplot
我生成有关下列变量疾病数据帧:[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链接
您可以检查这个代码,它工作如何你想要的:
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.你的第二个链接图像
通过
周
不工作 - >得到一个空的空间。
亲爱的Malvina_a,它很完美。我感谢你的帮助。对于图片抱歉。如果可能的话,我有最后一个问题。如果我想制作一个堆叠barplot,就是说,有两个变量(例如,导入的案例编号和autocchtonous案例编号),根据您的具体情况,我如何编码它:dataset % group_by_(input $ Time_unit)%>%summarize(Sum1 = sum(Imported_Cases),Sum2 = sum(Autochtonous_Cases)?Thank you for advance。 – Pascal
是的你应该按照你的写法来创建堆积条形图,在'ggplot' –
@ Malvina_ a计算'sum'并创建变量用作填充参数后,必须“融化”数据 – Pascal
我忘了说:你好! – Pascal