【问题标题】:Check if current date is between date period interval and export the result for each date on separate excel sheet检查当前日期是否在日期期间间隔之间,并将每个日期的结果导出到单独的 Excel 表上
【发布时间】:2019-01-27 10:27:14
【问题描述】:

我有一个包含两个日期列 start_holiday 和 end_holiday 的日期框架(四个变量)。我正在尝试检查特定日期是否在假期日期范围内,然后是否将该特定日期的结果导出为一个excel表。

我的意见:

df <- tibble::tribble(
      ~Code, ~Member_Id, ~Start.Holiday, ~End.Holiday,
  18100532L,         2L,      20190118L,    20190203L,
  18101425L,         1L,      20190118L,    20190203L,
  18101425L,         2L,      20181218L,    20190102L,
  18102843L,         1L,      20181222L,    20190101L,
  18103202L,         1L,      20190202L,    20190303L,
  18103202L,         2L,      20190202L,    20190303L,
  18104148L,         1L,      20181215L,    20181229L,
  18104148L,         2L,      20181215L,    20181229L,
  18105261L,         1L,      20181204L,    20181230L,
  18105261L,         2L,      20190109L,    20190114L,
  18105261L,         3L,      20181205L,    20181222L,
  18107386L,         1L,      20181205L,    20181222L,
  18107429L,         2L,      20181205L,    20181222L,
  18108931L,         1L,      20181217L,    20190110L,
  18109405L,         1L,      20190123L,    20190208L,
  18109405L,         2L,      20190123L,    20190208L,
  18113785L,         1L,      20190118L,    20190122L,
  18114041L,         1L,      20190118L,    20190122L,
  18114329L,         1L,      20181213L,    20181222L,
  18114329L,         2L,      20181213L,    20181222L)

到目前为止,我已经做到了,这将为 1 月 1 日度假的人提供服务。但是,我正在寻找一种代码更少、更智能的方法。假设我想检查 1 月 1 日到 1 月 11 日,使用这种方法我必须重新运行脚本 11 次并为每个日期单独导出。有没有一种方法可以用来检查某个日期是否在这两个时间间隔内,并且对于每个日期,将输出导出为一个 Excel 表?例如,对于 1 月 1 日(仅查看我的示例数据),3 人在度假并将其导出为一张 excel 表调用 0101 ,对于 1 月 2 日,2 人在度假并将结果导出为一张表调用 0201 ,依此类推。我希望我足够清楚

仅适用于 1 月 1 日

library(lubridate)
library(tidyverse)


df_interval <- df %>%
  janitor::clean_names() %>% 
  mutate(
    Start_H = ymd(start_holiday),
    End_H = ymd(end_holiday), 
    # Create an interval object.
    holiday_Interval = interval(start = Start_H, end = End_H),
    flag = case_when(
      ymd("2019-01-01") %within% holiday_Interval ~ 1,
      TRUE ~ 0)) %>% 
  select(-holiday_Interval)

为了更清楚,期望的输出

【问题讨论】:

    标签: r dplyr tidyverse purrr lubridate


    【解决方案1】:

    在这里,您将收到一个.xlsx 文件,其中包含每个日期的表格:

    library(dplyr)
    library(lubridate)
    library(openxlsx)
    
    
    df <- 
      df %>%
      mutate_at(3:4, ymd)
    
    dates <-
      seq(
        df$Start.Holiday %>% min(),
        df$End.Holiday %>% max(),
        1
      ) %>%
      as.character()
    
    wb <- createWorkbook()
    
    for (d in dates) {
      temp <-
        df %>%
        filter(Start.Holiday <= ymd(d) & End.Holiday >= ymd(d))
        addWorksheet(wb, sheetName = d)
        writeData(wb, d, temp)
    }
    
    saveWorkbook(wb, 'holidays.xlsx')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多