У меня проблемы с реактивной передачей date-time
функций сворачивания в index_by
функцию из пакета tsibble
.
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)
})
}
Это обеспечивает лаконичный и понятный конвейер.
date-range > 60
иdate-range > 120
соответственно. Нет смысла складыватьweek()
иmonth()
в один тсиббл. - person Earo Wang   schedule 13.08.2019