检查当前日期是否在日期周期间隔之间,并在单独的 excel sheet 上导出每个日期的结果
Check if current date is between date period interval and export the result for each date on separate excel sheet
我有一个带有两个日期列的日期框(四个变量),start_holiday 和 end_holiday.I 我正在尝试检查特定日期是否在假日日期范围内,如果是则导出该特定日期的结果为 excel sheet。
我的输入:
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 sheet?例如,1 月 1 日(仅查看我的样本数据)3 人在度假并将其导出为一个 excel sheet 调用 0101,对于 1 月 2 日,2 人在度假并将结果导出为一个sheet 拨打 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)
为了更清楚,期望的输出
在这里您将收到一个 .xlsx
文件,每个日期 sheet:
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')
我有一个带有两个日期列的日期框(四个变量),start_holiday 和 end_holiday.I 我正在尝试检查特定日期是否在假日日期范围内,如果是则导出该特定日期的结果为 excel sheet。
我的输入:
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 sheet?例如,1 月 1 日(仅查看我的样本数据)3 人在度假并将其导出为一个 excel sheet 调用 0101,对于 1 月 2 日,2 人在度假并将结果导出为一个sheet 拨打 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)
为了更清楚,期望的输出
在这里您将收到一个 .xlsx
文件,每个日期 sheet:
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')