start_holidayとend_holidayの2つの日付列を持つ日付フレーム(4つの変数)があります。休日の日付範囲内の特定の日付があるかどうかを確認し、その特定の日付の結果を1つの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回再実行し、日付ごとに個別にエクスポートする必要があります。ある日付がこれらの2つの間隔内にあるかどうかを確認し、各日付について、出力を1つのExcelシートとしてエクスポートするために使用できる方法はありますか?たとえば、1月1日(私のサンプルデータのみを見る)の場合、3人が休暇中で、それらを1つのExcelシートコール0101としてエクスポートし、1月2日の場合、2人が休暇中で、結果を1つのシートコール0201としてエクスポートします。私は十分に明確だったと思います
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
は、日付ごとにシート付きの1つのファイルを受け取ります。
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')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加