在 Dplyr 中排除 Dot 中的周末

Posted

技术标签:

【中文标题】在 Dplyr 中排除 Dot 中的周末【英文标题】:Exclude Weekends in Dot in Dplyr 【发布时间】:2022-01-21 19:37:37 【问题描述】:

这是此答案的后续问题:https://***.com/a/45254762/5893585

我正在使用 prophet 包中的 dplyr 中的 do 函数。尝试此操作时,我想制作一个不包括周末的未来数据框。以下是我当前的代码:

当前数据框:

dataset
          ds     group     y
  2021-12-15         A     5
  2021-12-16         A     6
  2021-12-15         B    10
  2021-12-16         B     7
         etc       etc   etc

预测

library(dplyr)
library(prophet)

data = dataset %>%  
group_by(group) %>%
do(predict(prophet(., daily.seasonality = TRUE, yearly.seasonality = TRUE), 
make_future_dataframe(prophet(.,daily.seasonality = TRUE, yearly.seasonality = TRUE), periods = 14))) %>%
select(ds, group, yhat)

如何重写上面的代码来过滤make_future_dataframe 数据集没有周末?

我希望它看起来像这样,但这不起作用:

data = dataset %>%  
  group_by(group) %>%
  do(predict(prophet(., daily.seasonality = TRUE, yearly.seasonality = TRUE), 
  make_future_dataframe(prophet(.[which(weekdays(.$ds) != 'Saturday' | weekdays(.$ds) != 'Sunday'),],daily.seasonality = TRUE, yearly.seasonality = TRUE), periods = 14))) %>%
  select(ds, group, yhat)

【问题讨论】:

【参考方案1】:

我们可以在预测之前删除周末:

df %>% 
  group_by(group) %>% 
  mutate(weekdays = weekdays(ds)) %>% 
  filter(weekdays != "Saturday" & weekdays != "Sunday") %>% 
  do(predict(prophet(., daily.seasonality = TRUE, yearly.seasonality = TRUE), 
             make_future_dataframe(prophet(.[which(weekdays(.$ds) != 'Saturday' | weekdays(.$ds) != 'Sunday'),],daily.seasonality = TRUE, yearly.seasonality = TRUE), periods = 14))) %>%
  select(ds, group, yhat)

【讨论】:

谢谢,由于某种原因,输出仍然包含周末数据。知道为什么会这样吗? 这是在 make_future_dataframe 部分中使用点的准确方法吗? make_future_dataframe(prophet(.[which(weekdays(.$ds) != 'Saturday' | weekdays(.$ds) != 'Sunday')?

以上是关于在 Dplyr 中排除 Dot 中的周末的主要内容,如果未能解决你的问题,请参考以下文章

r dplyr filter:正则表达式排除AND匹配

SQL 排除周末和公共/银行假日

从 strtotime 中排除周末

Oracle 查询排除周末和下午 6 点到晚上 9 点

R语言dplyr包使用select函数通过索引查询或者排除数据列实战(Select Columns by Index)

从日期计算中排除周末和自定义日期(即假期)