首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数反应性地传递到tsibble index_by

将函数反应性地传递到tsibble index_by
EN

Stack Overflow用户
提问于 2019-08-12 16:32:27
回答 1查看 97关注 0票数 1

我在反应性地将date-time折叠函数从tsibble包传递到index_by函数时遇到了问题。

index_bytime function作为参数(例如,来自lubridateweek()month() ),并相应地折叠数据。

我希望折叠是对用户输入(特别选择的数据范围)的反应。

示例:如果选择date-range > 60,则使用week()折叠;如果选择date-range > 120,则使用month()折叠。

编辑:我特别指的是在shiny模块的服务器端环境中使用tsibble进行绘图。示例:

代码语言:javascript
复制
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的示例:

代码语言:javascript
复制
  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)
      })
    }

这允许简洁和可读的流水线。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 17:36:07

此自定义函数根据选定的日期范围返回所需的折叠函数。

代码语言:javascript
复制
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]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57457899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档