es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excluir fines de semana en R en Dplyr.

Esta es una pregunta de continuación de esta respuesta: https://stackoverflow.com/a/45254762/5893585

Estoy utilizando la función do en dplyr dentro del paquete prophet. Al intentar esto, quiero crear un dataframe futuro excluyendo los fines de semana. A continuación se muestra mi código actual:

Dataframe actual:

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

Predicción:

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)

¿Cómo puedo reescribir el código anterior para filtrar el dataframe de make_future_dataframe y excluir los fines de semana?

Quiero que se vea algo como esto, sin embargo esto no está funcionando:

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)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para filtrar los fines de semana de la función make_future_dataframe en prophet, puedes modificar el código de la siguiente manera:

    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) %>% filter(weekdays(.) %in% c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes")), 
                 )) %>%
      select(ds, group, yhat)
    

    Este código agrega un filtro después de la función make_future_dataframe para incluir solo los días de la semana (de lunes a viernes) en el marco de datos resultante. La instrucción %in% c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes") verifica si el día de la semana es uno de los días mencionados en el vector.

    Nota: Quité la sintaxis .[which()] ya que no es necesaria con %>%.

Comments are closed.