1

我在将date-time折叠index_by函数从 package被动传递到函数时遇到问题tsibble

index_by将 a 作为参数time function(例如week()month()from 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)
      })
    }

这允许简洁和可读的管道。

4

1 回答 1

0

This custom function returns desired collapsing function based on selected date-range.

get_fct =
      function(x){
        if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] <= 60){
            ymd
        }
        else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] < 120){
            yearweek
        }
        else if(date_Range$selectdateRange[2] - date_Range$selectdateRange[1] >= 120){
            yearmonth}
      }


  collapsing_function = get_fct(x = as.numeric(date_Range$selectdateRange[2] - date_Range$selectdateRange[1]))
于 2019-10-18T09:36:07.183 回答