【发布时间】:2019-08-12 08:32:26
【问题描述】:
我在将 date-time 折叠函数从包 tsibble 被动传递到 index_by 函数时遇到问题。
index_by 将time function 作为参数(例如week() 或month() 来自lubridate)并相应地折叠数据。
我希望折叠能够响应用户输入(特别是选择的数据范围)。
示例:如果选择date-range > 60,则使用week() 折叠,如果选择date-range > 120,则使用month() 折叠。
编辑: 我特别指的是在闪亮模块的服务器端上下文中使用 tsibble 进行绘图。示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
df() %>%
index_by(collapse_time = week(.)/month(.)) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~collapse_time, y = ~trace1)
})
}
为了避免代码重复,最好以某种方式将日期折叠函数传递给 index_by。使用 tibbletime 的示例:
mod_plot = function(input, output, session, df, date_Range){
output$plot = renderPlotly({
#create reactive variable collapse_time based on selected time range
collapse_time = renderText(if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) <= 60){"daily"}
else if(as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]) < 120){"weekly"}
else{"monthly"})
df() %>%
collapse_by(collapse_time ) %>%
group_by(date) %>%
summarise(trace1 = sum(trace1))%>%
plot_ly(type = 'bar', x = ~date, y = ~trace1)
})
}
这允许简洁易读的管道。
【问题讨论】:
-
我可能会将 tsibble 一分为二,分别用于
date-range > 60和date-range > 120。将week()和month()放在一起是没有意义的。 -
嗨,Earo。 (旁注:感谢伟大的包裹!)。应该提到,这完全是关于在响应式闪亮应用程序中使用 tsibble。它是绘制条形图模块的一部分。编辑后的帖子中有更多信息。